从LINQ GroupBy访问值

时间:2017-08-02 06:59:02

标签: c# linq

我有一个看起来像这样的linq查询:

            var myGrouping = (
                from p in context.Products
                join pt in context.ProductTypes on p.productId equals pt.productId
                select new
                {
                    ProductName = p.productName,
                    Type = pt.productType
                }).GroupBy(x => x.ProductName ).ToList();

这给了我我想要的东西,每个ProductName的一个组,其中显示了类型。现在,我要做的是检查每个组,看看这些分组中的ProductType是否有所不同,这是我有时会在数据库中得到的错误。

我已经尝试了一些方法来访问这些数据,似乎我可以使用item.Distinct().Skip(1).Any()检查这些分组,看看它们是否有所不同。问题只是我不知道如何访问ProductName和Type,以便循环它。我尝试过像

这样的事情

foreach (IGrouping<string, string?> ProductGroup in myGrouping)

以及沿着这些方向的事情,但它似乎永远不可访问。我的问题是,如何访问IGroupings中的元素?

2 个答案:

答案 0 :(得分:3)

使用GroupBy时,您可以访问:

  • 使用list.Key
  • 排序的密钥
  • 具有list.ToList()
  • 的每个群组的列表

所以:

foreach(var group in input.GroupBy(it => it.Sort)) 
{
    var sort = group.Key;
    var list = group.ToList();
}

答案 1 :(得分:0)

像这样使用

 var myGrouping = (
            from p in context.Products
            join pt in context.ProductTypes on p.productId equals pt.productId
            select new
            {
                ProductName = p.productName,
                Type = pt.productType
            }).GroupBy(x => new{x.ProductName,x.Type } ).Select(x=>new {ProductName =x.Key.ProductName ,Type=x.Key.Type}).ToList();