如何使用Linq GroupBy()返回GroupKey + GroupKeyItem + GroupList?

时间:2015-09-23 02:03:25

标签: linq c#-4.0

我有一个产品列表多个选项属于不同的选项组。出于显示目的,每个组还具有排序顺序

我的问题是如何使用 Linq GroupBy()或其他Linq方法创建列表以返回组密钥组排序顺序以及列表中产品的选项列表?我发现的所有示例只返回组密钥和组项列表。

这是我到目前为止所拥有的:

productList = db.Products.Where(p => p.Active)ToList();
productListOptions = productList.SelectMany(p => p.Options).Distinct().ToList();    
var groupedOptions = from o in productListOptions
    group o by o.OptionGroup into g
    select new { OptionGroupName = g.Key.Name, OptionGroupSortOrder = g.Key.SortOrder, OptionList = g.ToList() };

谢谢!

1 个答案:

答案 0 :(得分:1)

var model = db.Products
  .Include(p=>p.Options)
  .Include(p=>p.Options.Select(o=>o.OptionGroup))
  .Where(p=>p.Active);

foreach(var product in model)
  foreach(var optiongroup in product
    .GroupBy(p=>p.Options.OptionGroup)
    .OrderBy(og=>og.SortOrder))
  {
    // Do stuff at start of group
    foreach(var option in optiongroup)
      // Do stuff for each option
    // Do stuff at end of group
  }