我有一個查詢LINQ不同,並選擇新的查詢
var QP = (from a in QProductAllInfo select new { a.Id, a.Title, a.FullTitle}).Distinct();
結果是:
- 1諾夫伊萬
- 1諾夫伊萬
- 2 Petrov的彼得
- 3西多羅夫伊凡
- 3 Sidorov Ivan
,我需要的結果是:
- 1伊萬諾夫伊萬
- 2彼得羅夫切赫
- 3西多羅夫伊萬
我有一個查詢LINQ不同,並選擇新的查詢
var QP = (from a in QProductAllInfo select new { a.Id, a.Title, a.FullTitle}).Distinct();
結果是:
,我需要的結果是:
假設不同的ID總是被認爲是不同的,你可以試試這個。
我可能會寫在兩個查詢。這樣就很容易調試並且更易讀。您可以使用MoreLinq
。
var temp = from a in QProductAllInfo select new { a.Id, a.Title, a.FullTitle}.ToList();
var result = temp.DistinctBy(i => i.Id);
您還可以使用
Var result = temp.GroupBy(x => x.Id).Select(y => y.First());
它是幫助,但我不能做這樣的代碼datagridview.datasource = result; – alexandrovdi 2012-04-03 13:27:23
您無法將Ienumerable分配給數據源。請谷歌如何將Ienumerable分配給數據源。我不擅長ASP.net – Sandeep 2012-04-03 13:30:47
謝謝你DistinctBy工作! – alexandrovdi 2012-04-03 14:08:26
您可以實現的是的IEqualityComparer使用.Distinct,以確定是否項目已經存在於列表中。它可以比較屬性而不是對同一對象的引用。
但我不知道它是否適用於匿名類型。
如果您在QProductAllInfo有重複,由此免去您的代碼應該解決您的問題。
var QP = from a in QProductAllInfo.Distinct()
select new { a.Id, a.Title, a.FullTitle };
如果這不起作用,你可以使用元組,而不是匿名類型是這樣的:
var QP = from a in QProductAllInfo
select Tuple.Create(a.Id, a.Title, a.FullTitle);
應用匿名類型DISTINCT運算符是無用的,因爲匿名類型總是引用donc類型實現IEquatable接口。
在實際中,我需要選擇多於8項。最後我需要做下一步:datagridview.datasource = QP; – alexandrovdi 2012-04-03 13:38:08
你有沒有試過對你的數據源應用'Distinct',比如'from QProductAllInfo.Distinct()'中的? – madd0 2012-04-03 11:22:36
是的。 Dosn't工作 – alexandrovdi 2012-04-03 12:35:40