如何使用LINQ进行SELECT UNIQUE?

bar*_*ron 94 sql linq select unique visual-studio

我有一个这样的列表:

Red
Red
Brown
Yellow
Green
Green
Brown
Red
Orange
Run Code Online (Sandbox Code Playgroud)

我试图用LINQ做一个SELECT UNIQUE,即我想要

Red
Brown
Yellow
Green
Orange

var uniqueColors = from dbo in database.MainTable
                   where dbo.Property == true
                   select dbo.Color.Name;
Run Code Online (Sandbox Code Playgroud)

然后我把它改成了

var uniqueColors = from dbo in database.MainTable
                   where dbo.Property == true
                   select dbo.Color.Name.Distinct();
Run Code Online (Sandbox Code Playgroud)

没有成功.第一个select获取所有颜色,那么如何修改它才能获得唯一值?

如果有更好的方法来构建此查询,那么就更乐意走这条路.

我如何编辑它以便我可以使用.OrderBy("列名"),即按字母顺序按颜色名称,所以名称属性?

我不断收到一条消息:

无法从用法推断出类型参数.尝试明确地指定类型参数.

Jam*_*ran 157

Distinct()会破坏排序,因此您必须在此之后进行排序.

var uniqueColors = 
               (from dbo in database.MainTable 
                 where dbo.Property == true 
                 select dbo.Color.Name).Distinct().OrderBy(name=>name);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这是正确的答案.有人可以解释.OrderBy()参数中的内容.你有name => name.该名称是否来自数据库中的列名?因为我们有`dbo.Color.Name`然后只是`name => name`,它告诉我它不是列名?奇怪的是,如果我将其改为`.OrderBy(a => a)`,它也会正确排序 (3认同)
  • 变量的名称无关紧要.它只是{object pass into function} => {object used to sort}.由于我们已经完成了Select,所以正在排序的集合中唯一的东西是名称. (3认同)

jwe*_*ndl 19

var uniqueColors = (from dbo in database.MainTable 
                    where dbo.Property == true
                    select dbo.Color.Name).Distinct();
Run Code Online (Sandbox Code Playgroud)

  • +1,但我建议您为代码使用代码块 (2认同)

cor*_*erm 10

使用查询理解语法,您可以按如下方式实现orderby:

var uniqueColors = (from dbo in database.MainTable
                    where dbo.Property
                    orderby dbo.Color.Name ascending
                    select dbo.Color.Name).Distinct();
Run Code Online (Sandbox Code Playgroud)