mvc Groupby和Orderby嵌套

时间:2014-04-02 18:12:51

标签: c# asp.net-mvc linq

mvc初学者 我有一个包含属性Num_of_steps的批次表,表示建造房屋的已完成步骤数。

我目前使用它来检索批次信息并按批号排序。

        var ViewModel = new Sub_lot_VM();
        ViewModel.Subdivisions = db.Subdivisions
            .Include(i => i.Lots)
            .ToList();
        if (ViewModel.Subdivisions !=null)   // if data sort by lot number
        {
           foreach (var item in ViewModel.Subdivisions)
              item.Lots = item.Lots.OrderBy(i => i.LotName).ToList();
        }
        return View(ViewModel);
    }     

现在我想将这些信息显示为3组:

首先,其中计数在1到114之间(有效),

,其中计数高于115(或GTE 115?)(已完成)(然后按批次名称排序)和

第三个组是count = 0(未启动),也是按批次名称排序。

我一直试图想一想如何在没有运气的情况下将.where和.groupby lambda表达式添加到我的方法中。例如.where(I=>i.Lot.Num_of_steps=0)

我还看到我需要一个foreach,其中一些LINQ示例不需要foreach。仍然对此感到困惑。

1 个答案:

答案 0 :(得分:1)

首先获得批次,然后使用groupby和范围来获取组

from x in
(
    db.Subdivisions.SelectMany(sd => sd.Lots)
)
group x by x.Num_of_steps == 0 ? 3 : x.Num_of_steps < 115 ? 1 : 2 into g 
orderby g.Key
select g.OrderBy(g1 => g1.LotName)

您可以为组提供有意义的名称,而不是1,2和3,但您也可以将其推迟到显示时间。这些数字有助于正确排序。