如何使用linq / projection在col上选择distinct?

时间:2011-12-02 07:43:11

标签: linq linq-to-sql

如何在x.name上使用distinct进行以下操作?

var x= db.Cs.Select(x => new{name=x.name,id=x.id}).Distinct().ToList();

根据以下示例数据:

name, id
joe, 1
joe, 2
joe, 3

我使用上面的独特查询获取整个集合:

name, id
joe, 1
joe, 2
joe, 3

我真正想要的显然是一个独特的行,但我仍然想要一个标识符(即):

name, id
joe, 1

2 个答案:

答案 0 :(得分:3)

完成Stephane的帖子。他的代码的结果是IGrouping ....如果你想要你的id / name匿名类型,只需添加:

var x = db.Cs.Select(x => new { x.name, x.id})
            .GroupBy(x => x.name)
            .Select(g => g.First()) 

答案 1 :(得分:1)

您可以使用GroupBy方法:

var x = db.Cs.Select(x => new { x.name, x.id}).GroupBy(x => x.name);

然后你会得到一个字典,其中键是你的投影的名称和价值。

或者如果你真的想要使用不同的,你可以编写自己的IEqualityComparer并使用正确的Distinct overload