使用下面的代码,我没有得到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");
var predicate = PredicateBuilder.True<Services>()
.And(m => products.Contains(m.Service));
var Results = from d in Services.Distinct()
.Where(predicate )
select d.ID;数据库表(服务)为:
ID Service
==
400 13Conv
401 13Conv
400 12Conv
400 07Conv
400 11Conv使用上面的数据,我得到了5条记录,而我预计是2条。
ID字段是数据库中的字符串。
发布于 2013-03-16 05:12:20
它是Distinct,而不是DistinctByKey (类似的方法在LINQ中不存在),因此将检查行中的所有值是否相等。有了这项检查,所有行都是相等的。这就是为什么它们都是通过查询返回的。
顺便说一下-数据库如何决定应该返回具有给定Key的哪一行?
如果您尝试仅接收IDs,并且它们应该是不同的,请尝试该查询:
var results = Services.Where(predicate).Select(s => s.ID).Distinct().ToList();更新
根据像this one这样的问题,LINQ存在Entites和DISTINCT的已知问题。请尝试该查询:
Services.Where(predicate).GroupBy(s => s.Id).Select(g => g.Key).ToList();发布于 2013-03-16 05:16:14
您告诉它,您需要一个不同的Service对象列表,而不是服务it (或名称)。
我不熟悉以编程方式构建谓词,但我认为您应该这样做:
var Results = (from d in Services.Where(Predicate)
select d.ID).Distinct();https://stackoverflow.com/questions/15442139
复制相似问题