Answers:
那应该工作得很好-它应该先对具有falsefoo值的实体进行排序,然后再对具有truefoo值的实体进行排序。
这肯定在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();