如何在 EntityFramework 中使用 OrderBy

How to use OrderBy in EntityFramework

我有一个名为 Person 的 table,包含两列:(PersonId - key, PersonName)

我正在尝试检索 PersonName 订购的所有人员。

以下代码未对我的结果进行排序:

var persons = from p in MyContext.Persons.OrderBy(x=>x.PersonName) select p;

var res = persons.Distnct().ToArray();

是否可以在那个阶段执行订单(我知道将 OrderBy 移动到第二行 - 在评估之后 - 执行订单)?

试试这个:

var result = (from p in MyContext.Persons
                     select new
                     {
                         p.PersonName
                     }).Distinct().OrderBy(x => x.PersonName).ToArray();

没有LINQ

的解决方案
 var result = MyContext.Persons.Select(a => new { a.name }).Distinct().OrderBy(a => a.name).ToArray();

Linq 文档说:

The Distinct(...) method returns an unordered sequence that contains no duplicate values.

因此不能保证订单保持不变。
如果您需要在 .Distinct() 之后保证订购,那么您唯一的选择是再次申请 .OrderBy()

参考:
https://msdn.microsoft.com/en-us/library/bb348436(v=vs.110).aspx

您可以在单个查询中同时包含 order by 和 distinct。它对我来说工作正常:

var persons = MyContext.Persons.OrderBy(x => x.Name).Select(x => x.Name).Distinct();

如果要将其转换为数组,请使用 ToArray() 方法。