【问题标题】:Group By Query with Entity Framework Query Method使用实体框架查询方法进行分组查询
【发布时间】:2017-03-06 15:03:32
【问题描述】:

我有这个查询,我想更改为 linq 查询方法:

select o.OrderID,o.OrderNo, o.OrderDate, SUM(TotalAmount) Total
 from orders o inner join
 OrderDetails e on o.OrderID=e.OrderID
 group by  o.OrderNo, o.OrderDate,o.OrderID order by o.OrderNo desc

我一直在尝试以下方法:

public List<Orders>List()
{
    var list = new List<Orders>();
    try
    {
        using (var db = new MyDatabaseEntities())
        {

            list = db.Orders.Select(o => new { o.OrderID, o.OrderNo, o.OrderDate, o.OrderDetails.TotalAmount}).
                GroupBy(x => new { x.OrderID, x.OrderNo, x.OrderDate }).
                Select(o => new
                {
                    o.Key,
                    id = o.OrderID,
                    order = o.NumOrder,
                    date = o.OrderDate,
                    Total = o.Sum(o.TotalAmount)
                }).Tolist();
        }
    }
    catch(Exception e)
    {
        throw new Exception(e.Message);
    }
    return list;
}

有人可以帮助我吗?

【问题讨论】:

    标签: c# entity-framework linq group-by include


    【解决方案1】:

    我想试试这个:

    var list=db.Orders.Join(OrderDetails,
                    o=>o.OrderID
                    e=>e.OrderID
                    (o,e)=>new{Orders=o,OrderDetails=e})
                    .GroupBy(o=>new {o.OrderNo, o.OrderDate,o.OrderID})
                    .OrderBy(x=>x.Key.OrderNo)
                    .Select(o=>new{
                               o.Key.OrderID,
                               o.Key.OrderNo, 
                               o.Key.OrderDate, 
                               Total=o.SUM(x=>x.TotalAmount)})
                    .ToList();
    

    【讨论】:

      【解决方案2】:

      试试这个: 类似sql的语法

      from t in TblOrders
      join d in TblOrderDetails
      on t.Id equals d.OrderId
      group d by new {t.Id, t.OrderNo, t.OrderDate} into g
      orderby g.Key.OrderNo descending
      select  new 
      {
      ID = g.Key.Id, 
      OrderNo = g.Key.OrderNo,
      OrderDate = g.Key.OrderDate,
      amount = g.Sum(x=>x.Rate)
      }
      

      lambda 喜欢:

      TblOrders
         .Join (
            TblOrderDetails, 
            t => t.Id, 
            d => d.OrderId, 
            (t, d) => 
               new  
               {
                  t = t, 
                  d = d
               }
         )
         .GroupBy (
            temp0 => 
               new  
               {
                  Id = temp0.t.Id, 
                  OrderNo = temp0.t.OrderNo, 
                  OrderDate = temp0.t.OrderDate
               }, 
            temp0 => temp0.d
         )
         .OrderByDescending (g => g.Key.OrderNo)
         .Select (
            g => 
               new  
               {
                  ID = g.Key.Id, 
                  OrderNo = g.Key.OrderNo, 
                  OrderDate = g.Key.OrderDate, 
                  amount = g.Sum (x => x.Rate)
               }
         )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多