使用 LINQ 对不同的值进行排序 [重复]

Posted

技术标签:

【中文标题】使用 LINQ 对不同的值进行排序 [重复]【英文标题】:Ordering Distinct values with LINQ [duplicate] 【发布时间】:2011-10-21 05:17:04 【问题描述】:

可能重复:How do I get a distinct, ordered list of names from a DataTable using LINQ?

这是我在这里的第一个问题。我从我的数据库中获取一个下拉列表的不同值列表,如下所示:

var plocQ = (from m in db.SERVICE_NRS
             orderby m.PLOC
             select new  PlocID = m.PLOC, value = m.PLOC ).Distinct();

排序似乎没有效果,我必须这样做:

var plocQ = (from m in db.SERVICE_NRS
             select new  PlocID = m.PLOC, value = m.PLOC ).Distinct();

plocQ = from s in plocQ
        orderby s.PlocID
        select s;

我想知道这是否与 LINQ 或数据库有关?我对 LINQ 有点陌生,之前写过太多 SQL。有什么想法吗?

【问题讨论】:

【参考方案1】:

这是因为您在对初始结果进行排序后更改了投影中的内容。 Distinct doesn't guarantee that the order is preserved.

顺便说一句,即使它确实以这种方式工作,您仍然不想这样做!您将在整个项目列表中进行排序,即使其中一些项目将被丢弃。

如果您只想在一个语句中完成所有操作,您可以这样做:

var plocQ = (from m in db.SERVICE_NRS
             select new  PlocID = m.PLOC, value = m.PLOC )
            .Distinct()
            .OrderBy(s => s.PlocID);

【讨论】:

谢谢!这就解释了。我还发现 Marco Russo 的这篇文章与 SQL 有关。 很高兴为您提供帮助!实际上,我的回答中已经链接了同一篇文章。 啊,好的,贾斯汀,我看到了你的链接。感谢@Dmitry,下次会尝试更好地搜索!

以上是关于使用 LINQ 对不同的值进行排序 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用二级排序对 linq 查询进行排序 [重复]

C# LINQ 组按属性集合,然后按列表定义的显式顺序对每个组进行排序[重复]

按 ID 对核心数据进行排序 [重复]

在Kotlin中按多个字段对集合进行排序[重复]

对字典中的数组进行排序[重复]

对db中的值进行排序和计数[重复]