首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Distinct()时不返回distinct记录

使用Distinct()时不返回distinct记录
EN

Stack Overflow用户
提问于 2013-03-16 05:10:29
回答 2查看 866关注 0票数 0

使用下面的代码,我没有得到ID上不同的记录。为什么会这样呢?

代码语言:javascript
复制
List<string> products = new List<string>();
products.Add("13CONV");
products.Add("12CONV");
products.Add("11CONV");
products.Add("10CONV");
products.Add("09CONV");
products.Add("08CONV");
products.Add("07CONV");

var predicate = PredicateBuilder.True<Services>()
                                .And(m => products.Contains(m.Service));

var Results = from d in Services.Distinct()
                                .Where(predicate )
              select d.ID;

数据库表(服务)为:

代码语言:javascript
复制
ID         Service
==
400        13Conv
401        13Conv
400        12Conv
400        07Conv
400        11Conv

使用上面的数据,我得到了5条记录,而我预计是2条。

ID字段是数据库中的字符串。

EN

回答 2

Stack Overflow用户

发布于 2013-03-16 05:12:20

它是Distinct,而不是DistinctByKey (类似的方法在LINQ中不存在),因此将检查行中的所有值是否相等。有了这项检查,所有行都是相等的。这就是为什么它们都是通过查询返回的。

顺便说一下-数据库如何决定应该返回具有给定Key的哪一行?

如果您尝试仅接收IDs,并且它们应该是不同的,请尝试该查询:

代码语言:javascript
复制
var results = Services.Where(predicate).Select(s => s.ID).Distinct().ToList();

更新

根据像this one这样的问题,LINQ存在Entites和DISTINCT的已知问题。请尝试该查询:

代码语言:javascript
复制
Services.Where(predicate).GroupBy(s => s.Id).Select(g => g.Key).ToList();
票数 2
EN

Stack Overflow用户

发布于 2013-03-16 05:16:14

您告诉它,您需要一个不同的Service对象列表,而不是服务it (或名称)。

我不熟悉以编程方式构建谓词,但我认为您应该这样做:

代码语言:javascript
复制
var Results = (from d in Services.Where(Predicate)
               select d.ID).Distinct();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15442139

复制
相关文章

相似问题

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