如何在 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() 方法。
我有一个名为 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() 方法。