使用以下代码我没有获得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
使用上面的数据,当我预期为2时,我会得到5条记录。
ID字段是DB中的字符串。
答案 0 :(得分:2)
它是Distinct
,而不是DistinctByKey
(LINQ中不存在这样的方法),因此检查行中的所有值是否相等。通过该检查,非行数相等。这就是为什么它们都是通过查询返回的。
顺便说一下 - 数据库将如何决定,应返回给定Key
的哪一行?
如果您尝试仅接收ID
,并且它们应该是独特的,请尝试该查询:
var results = Services.Where(predicate).Select(s => s.ID).Distinct().ToList();
<强>更新强>
根据像this one这样的问题,LINQ to Entites和DISTINCT
存在已知问题。请尝试该查询:
Services.Where(predicate).GroupBy(s => s.Id).Select(g => g.Key).ToList();
答案 1 :(得分:1)
你告诉它你需要一个明确的Service
对象列表,而不是服务ID(或名称)。
我不熟悉以编程方式构建谓词,但我认为你会做这样的事情:
var Results = (from d in Services.Where(Predicate)
select d.ID).Distinct();