我有一个名为Person
的表,有两列:(PersonId - key,PersonName
)
我正在尝试检索PersonName
订购的所有人。
以下代码不会命令我的结果:
var persons = from p in MyContext.Persons.OrderBy(x=>x.PersonName) select p;
var res = persons.Distnct().ToArray();
是否可以在该阶段执行订单(我知道在评估后将OrderBy
移至第二行 - 执行订单)?
答案 0 :(得分:3)
Linq文档说:
Distinct(...)方法返回一个无序序列,该序列不包含重复值。
所以订单不能保证保持不变。
如果您在.Distinct()
之后需要保证订购,那么您唯一的选择就是再次申请.OrderBy()
。
参考:
https://msdn.microsoft.com/en-us/library/bb348436(v=vs.110).aspx
答案 1 :(得分:1)
您可以在单个查询中包含order by和distinct。它对我来说很好:
var persons = MyContext.Persons.OrderBy(x => x.Name).Select(x => x.Name).Distinct();
如果要将其转换为数组,请使用ToArray()方法。
答案 2 :(得分:0)
试试这个:
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();