C# 使用distinct()时不返回distinct记录
使用以下代码,我无法在ID上获得不同的记录。为什么会这样C# 使用distinct()时不返回distinct记录,c#,linq,entity-framework,linq-to-entities,distinct,C#,Linq,Entity Framework,Linq To Entities,Distinct,使用以下代码,我无法在ID上获得不同的记录。为什么会这样 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"
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;
使用上面的数据,我得到了5条记录,而我预期是2条
ID字段是数据库中的一个字符串。它是
不同的,而不是不同的字节(类似的方法在LINQ中不存在),因此检查行中的所有值是否相等。通过该检查,非行数相等。这就是为什么它们都是通过查询返回的
顺便问一下,数据库如何决定应该返回具有给定键的行
如果您仅尝试接收ID
s,并且它们应该是不同的,请尝试该查询:
var results = Services.Where(predicate).Select(s => s.ID).Distinct().ToList();
更新
根据这样的问题,LINQ对实体和不同的存在已知问题。请尝试该查询:
Services.Where(predicate).GroupBy(s => s.Id).Select(g => g.Key).ToList();
它是独立的
,而不是DistinctByKey
(这样的方法在LINQ中不存在),因此检查行中的所有值是否相等。通过该检查,非行数相等。这就是为什么它们都是通过查询返回的
顺便问一下,数据库如何决定应该返回具有给定键的行
如果您仅尝试接收ID
s,并且它们应该是不同的,请尝试该查询:
var results = Services.Where(predicate).Select(s => s.ID).Distinct().ToList();
更新
根据这样的问题,LINQ对实体和不同的存在已知问题。请尝试该查询:
Services.Where(predicate).GroupBy(s => s.Id).Select(g => g.Key).ToList();
您告诉它您想要一个独特的服务
对象列表,而不是服务ID(或名称)列表
我不熟悉以编程方式构建谓词,但我认为您应该这样做:
var Results = (from d in Services.Where(Predicate)
select d.ID).Distinct();
您告诉它您想要一个独特的服务
对象列表,而不是服务ID(或名称)列表
我不熟悉以编程方式构建谓词,但我认为您应该这样做:
var Results = (from d in Services.Where(Predicate)
select d.ID).Distinct();
我不确定我是否理解你的最后一个问题。我想我的意思是,你没有提供信息来建议(而且无法推断),对于ID=400和ID=401,哪种服务是正确的。确定不希望使用Group By而不是Distinct吗?我希望它的行为方式与SQL Distinct相同。我不关心服务数据,我只想要唯一的ID。使用ToList()进行了更改,但它仍然返回重复的ID。是的,但这样做,您将从数据库中获取所有ID
s,并且Distinct
部分由应用程序计算。我很确定我的版本应该有效…我不确定我是否理解你的最后一个问题。我想我的意思是,你没有提供信息来建议(并且无法推断),对于ID=400和ID=401,哪种服务是正确的。确定不希望使用Group By而不是Distinct吗?我希望它的行为方式与SQL Distinct相同。我不关心服务数据,我只想要唯一的ID。使用ToList()进行了更改,但它仍然返回重复的ID。是的,但这样做,您将从数据库中获取所有ID
s,并且Distinct
部分由应用程序计算。我非常确定我的版本应该可以工作……我尝试将.Distinct()移动到示例中的位置,它返回相同的记录计数。似乎合乎逻辑但不起作用。你期望结果是什么?身份证列表?服务对象列表?另外,请尝试在Distinct()
之后添加.ToArray()
或.ToList()
。我希望确保查询已实际执行。我希望得到一个不同ID的列表,而不是一个具有重复ID的列表。添加了ToList()后,我仍然得到了DUP。我已尝试将.distinct()移动到示例中的位置,它返回相同的记录计数。似乎合乎逻辑但不起作用。你期望结果是什么?身份证列表?服务对象列表?另外,请尝试在Distinct()
之后添加.ToArray()
或.ToList()
。我希望确保查询已实际执行。我希望得到一个不同ID的列表,而不是一个包含重复ID的列表。添加了一个ToList()后,我仍然会得到DUP。