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
。仍然对此感到困惑。
答案 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,但您也可以将其推迟到显示时间。这些数字有助于正确排序。