2016-11-25 4 views
-1

Вот мой 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"]} 

Итак, мне нужно Group By 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() 
    }; 

Но тогда «lds» не видит ничего. Не знаете, как это сделать.

Спасибо!

ответ

1

Выбираете все продукты для ревизий, а затем создаете список потенциальных клиентов. Это проблема, потому что теперь для каждого продукта редакции вы получаете один элемент, содержащий все продукты ревизий для своего руководства.

Try удаление последующего 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() 
    }; 
+0

Спасибо! Я боролся с этим часами! –