0

使用以下代码,我没有在 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 字段是数据库中的字符串。

4

2 回答 2

2

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

顺便说一句 - 数据库将如何决定Key应该返回哪一行?

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

var results = Services.Where(predicate).Select(s => s.ID).Distinct().ToList();

更新

根据这样问题,LINQ to Entites 和DISTINCT. 请尝试使用该查询:

Services.Where(predicate).GroupBy(s => s.Id).Select(g => g.Key).ToList();
于 2013-03-15T21:12:20.057 回答
1

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

我不熟悉以编程方式构建谓词,但我认为你会做这样的事情:

var Results = (from d in Services.Where(Predicate)
               select d.ID).Distinct();
于 2013-03-15T21:16:13.580 回答