首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linq区分并选择新查询

linq区分并选择新查询
EN

Stack Overflow用户
提问于 2012-04-03 11:14:07
回答 3查看 39.2K关注 0票数 10

我有个疑问

代码语言:javascript
复制
var QP = (from a in QProductAllInfo select new { a.Id, a.Title, a.FullTitle}).Distinct();

结果是:

  • 伊万诺夫·伊凡
  • 伊万诺夫·伊凡
  • 2 Petrov Petr
  • 3 Sidorov Ivan
  • 3 Sidorov Ivan

我需要结果:

  • 伊万诺夫·伊凡
  • 2 Petrov Petr
  • 3 Sidorov Ivan
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-03 13:08:44

假设不同的Ids总是不同的,那么您可以尝试这样做。

我可能会把它写成两个查询。这样,调试就容易了,可读性也更强。您可以使用MoreLinq

DistinctBy

下载

代码语言:javascript
复制
var temp = from a in QProductAllInfo select new { a.Id, a.Title, a.FullTitle}.ToList();

var result = temp.DistinctBy(i => i.Id);

您也可以使用

代码语言:javascript
复制
Var result = temp.GroupBy(x => x.Id).Select(y => y.First());
票数 10
EN

Stack Overflow用户

发布于 2012-04-03 13:26:52

如果您在QProductAllInfo中有重复的代码,用它替换您的代码会解决您的问题。

代码语言:javascript
复制
var QP = from a in QProductAllInfo.Distinct() 
         select new { a.Id, a.Title, a.FullTitle };

如果这不起作用,可以使用元组而不是匿名类型,如下所示:

代码语言:javascript
复制
var QP = from a in QProductAllInfo
         select Tuple.Create(a.Id, a.Title, a.FullTitle);

在匿名类型上应用不同的操作符是无用的,因为匿名类型始终是donc实现IEquatable接口的引用类型。

票数 3
EN

Stack Overflow用户

发布于 2012-04-03 11:20:07

您可以实现一个IEqualitycomparer,.Distinct使用它来确定该项是否已经存在于列表中。它可以在属性上进行比较,而不是对同一个对象的引用进行比较。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9992117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档