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

linq区别并选择新查询

假设不同的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用于确定该项是否已存在于列表中。它可以在属性上进行比较,而不是在对同一对象的引用上进行比较。

但我不知道它是否适用于匿名类型。