我有一个查询
var QP = (from a in QProductAllInfo select new { a.Id, a.Title, a.FullTitle}).Distinct();
结果是:
我需要结果:
答案 0 :(得分:7)
假设不同的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());
答案 1 :(得分:2)
如果您在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运算符是没用的,因为匿名类型始终是不实现IEquatable接口的引用类型。
答案 2 :(得分:0)
您可以实现一个IEqualitycomparer,.Distinct用它来确定该项目是否已存在于列表中。它可以在属性上进行比较,而不是在对同一对象的引用上进行比较。
但我不知道它是否适用于匿名类型。