使用LINQ排序不同的值

时间:2011-08-05 21:12:59

标签: c# linq sorting

  

可能重复:
  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 个答案:

答案 0 :(得分:8)

这是因为您在之后改变投影中的内容,然后对初始结果进行排序。 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);