linq区别并选择新查询
本文关键字:查询 新查询 区别 选择 linq | 更新日期: 2023-09-27 18:29:55
我有一个查询
var QP = (from a in QProductAllInfo select new { a.Id, a.Title, a.FullTitle}).Distinct();
结果是:
- 1伊万诺夫伊万
- 1伊万诺夫伊万
- 2 Petrov Petr
- 3 Sidorov Ivan
- 3 Sidorov Ivan
我需要结果:
- 1伊万诺夫伊万
- 2 Petrov Petr
- 3 Sidorov Ivan
假设不同的Id总是被认为是不同的,你可以尝试一下。
我可能会把它写在两个查询中。这样一来,它很容易调试,可读性更强。您可以使用MoreLinq
。
DistinctBy
下载
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());
如果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接口的引用类型。
您可以实现一个IEqualitycomparer。Distinct用于确定该项是否已存在于列表中。它可以在属性上进行比较,而不是在对同一对象的引用上进行比较。
但我不知道它是否适用于匿名类型。