LINQ如何使用SELECT UNIQUE?

104
  • apple
  • banana
  • cherry
  • date
  • elderberry

I want to remove the first and last elements of the list (i.e. "apple" and "elderberry") and return the modified list. How can I achieve this in Python?

Thanks in advance!

Red
Red
Brown
Yellow
Green
Green
Brown
Red
Orange

我正在尝试使用LINQ进行SELECT UNIQUE操作,也就是说,我想要

Red
Brown
Yellow
Green
Orange

var uniqueColors = from dbo in database.MainTable
                   where dbo.Property == true
                   select dbo.Color.Name;

然后我把这个改成了

var uniqueColors = from dbo in database.MainTable
                   where dbo.Property == true
                   select dbo.Color.Name.Distinct();

我一直尝试获取唯一的颜色值,但一直没有成功。第一个 select 获取了所有的颜色,那么如何修改它只获取唯一的值呢?

如果有更好的查询结构,我非常乐意采用。

如何编辑它,以便我可以通过名称按字母顺序排序,即使用 .OrderBy( "column name" ) 排序?

我一直收到以下信息:

类型参数无法从使用中推断出来。请明确指定类型参数。

4个回答

174

Distinct() 会破坏顺序,所以你需要在此之后进行排序。

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

3
谢谢,这是正确的答案。有人可以解释一下在.OrderBy()参数中应该填什么吗?你用了name=>name,那个name是来自数据库中的列名吗?因为我们有dbo.Color.Name,然后只是写了name=>name,这让我感到奇怪,因为好像不是列名?如果我把它改成.OrderBy(a=>a),也能正确排序。 - baron
4
变量的名称无关紧要。它只是一个{传递给函数的对象} => {用于排序的对象}。由于我们已经完成了选择,因此在进行排序时,集合中唯一需要排序的是名称。 - James Curran
似乎如果有一个可以按整个对象/记录排序的OrderedBy()会很好。使用扩展方法仍然会无缘无故地调用委托。 - NetMage
1
@NetMage - 请澄清您所说的“整个对象/记录”的含义。是每个字段吗?按什么顺序?包括主键吗? - James Curran

21
var uniqueColors = (from dbo in database.MainTable 
                    where dbo.Property == true
                    select dbo.Color.Name).Distinct();

10

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

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

哦...这似乎没有实现字母排序 - 出于某种原因...我交换了升序和降序,结果相同。是distinct语句影响了它吗?也许需要在此之后加上orderedby? - baron
可以尝试一下:var uniqueColors = (from dbo in database.MainTable where dbo.Property select dbo.Color.Name).Distinct() .OrderBy(name => name); - cordialgerm

-1
var unique = (from n in test group n by n into g where g.Count()==1 select g.Key.ToString());

不确定哪里出了问题,但如果你有一个列表,它就能工作。 - pierre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接