3 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
我不明白第一個(gè)“帶樣本數(shù)據(jù)的結(jié)果”來(lái)自哪里,但控制臺(tái)應(yīng)用程序中的問(wèn)題是您正在使用SelectMany
查看每個(gè)組中的每個(gè)項(xiàng)目。
我想你只想要:
List<ResultLine> result = Lines .GroupBy(l => l.ProductCode) .Select(cl => new ResultLine { ProductName = cl.First().Name, Quantity = cl.Count().ToString(), Price = cl.Sum(c => c.Price).ToString(), }).ToList();
使用First()
此處獲取產(chǎn)品名稱(chēng)假設(shè)具有相同產(chǎn)品代碼的每個(gè)產(chǎn)品具有相同的產(chǎn)品名稱(chēng)。如評(píng)論中所述,您可以按產(chǎn)品名稱(chēng)和產(chǎn)品代碼進(jìn)行分組,如果任何給定代碼的名稱(chēng)始終相同,則會(huì)產(chǎn)生相同的結(jié)果,但顯然會(huì)在EF中生成更好的SQL。
我還建議你應(yīng)該分別更改Quantity
和Price
屬性int
和decimal
類(lèi)型 - 為什么使用字符串屬性顯然不是文本的數(shù)據(jù)?

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
以下查詢(xún)有效。它使用每個(gè)組來(lái)進(jìn)行選擇而不是SelectMany
。SelectMany
適用于每個(gè)集合中的每個(gè)元素。例如,在您的查詢(xún)中,您有2個(gè)集合的結(jié)果。SelectMany
獲得所有結(jié)果,總共3個(gè),而不是每個(gè)集合。以下代碼適用于IGrouping
選擇部分中的每個(gè)代碼,以使您的聚合操作正常工作。
var results = from line in Lines group line by line.ProductCode into g select new ResultLine { ProductName = g.First().Name, Price = g.Sum(_ => _.Price).ToString(), Quantity = g.Count().ToString(), };
- 3 回答
- 0 關(guān)注
- 1946 瀏覽
添加回答
舉報(bào)