Answers:
那应该工作得很好-它应该先对具有false
foo值的实体进行排序,然后再对具有true
foo值的实体进行排序。
这肯定在LINQ to Objects中有效-您实际上在使用哪个LINQ提供程序?
这里有一个LINQ到对象例子做的工作:
using System;
using System.Linq;
public static class Test
{
public static void Main()
{
var data = new[]
{
new { x = false, y = "hello" },
new { x = true, y = "abc" },
new { x = false, y = "def" },
new { x = true, y = "world" }
};
var query = from d in data
orderby d.x, d.y
select d;
foreach (var result in query)
{
Console.WriteLine(result);
}
}
}
false
(0)在true
(1)之前。
data.OrderBy(d => d.x).ThenBy(d => d.y)
只是想这样做,似乎没有隐式排序。我做了以下更明确的说明:
Something.OrderBy(e=>e.SomeFlag ? 0 : 1)
对真假进行排序。
true
意味着我错了a single bit set to 1
吗?对我来说,事实真相true > false
是显而易见的。
true > false
并不是众所周知的,而1 > 0
实际上是。
.OrderBy(e => e.SomeFlag == true)
这将等效于,.OrderBy(e => e.SomeFlag)
而.OrderBy(e => e.SomeFlag ? 0 : 1)
等价于.OrderByDescending(e => e.SomeFlag)
。前两个在true之前对false进行排序,其他两个在false之前对true进行排序。
如果您获得列表orderby true,请尝试以下代码。
db.member.where(x=>x.id==memberId).OrderBy(x=>!x.IsPrimary?1:0).ToList();