在LINQ中遇到Group By问题

时间:2016-11-25 19:00:41

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

这是我的LINQ查询:

var results = from l in leads
   from qr in l.QuoteRevisions
   from rp in qr.RevisionProducts
   select new QuoteSearchItem
   {
       ID = l.ID,
       ....
       ProductCodes = l.QuoteRevisions.SelectMany(qr => qr.RevisionProducts)
            .Select(p => p.Product.ProductCode).ToList()
   };

我们试图填充的对象如下:

public class QuoteSearchItem
{
    public LeadID {get; set; }
    ....
    public List<string> ProductCodes { get; set; }
    ....
}

我得到的结果几乎准确无误。但问题是,当有多个产品代码时,我会为每个潜在客户获得相同的行。所以,而不是得到这个:

{"LeadID": "12", "ProductCodes": ["Code1", Code2"]}

我明白了:

{"LeadID": "12", "ProductCodes": ["Code1", Code2"]}
{"LeadID": "12", "ProductCodes": ["Code1", Code2"]}

所以,我需要分组l.LeadID。但我在使用这种语法时遇到了麻烦。我试过这个:

var results = from l in leads
   from qr in l.QuoteRevisions
   from rp in qr.RevisionProducts
   group l by l.ID into lds
   select new QuoteSearchItem
   {
       ID = lds.ID,
       ....
       ProductCodes = lds.QuoteRevisions.SelectMany(qr => qr.RevisionProducts)
            .Select(p => p.Product.ProductCode).ToList()
   };

然后&#34; lds&#34;没有看到包含任何东西。不知道怎么做。

谢谢!

1 个答案:

答案 0 :(得分:1)

您正在选择所有修订产品,然后构建潜在客户列表。这就是问题所在,因为现在对于每个修订版产品,您都会得到一个包含所有修订产品的元素。

尝试删除后续from

var results = from l in leads
    select new QuoteSearchItem
    {
        ID = l.ID,
        ....
        ProductCodes =
            l.QuoteRevisions
                .SelectMany(qr => qr.RevisionProducts)
                .Select(p => p.Product.ProductCode)
                .ToList()
    };