문자열 인 f.bar로 정렬하려는 linq 쿼리가 있지만 먼저 부울 필드 인 f.foo로 정렬하고 싶습니다. 아래 쿼리와 같습니다.
(from f in foo
orderby f.foo, f.bar
select f)
이것이 컴파일되지만 예상대로 작동하지 않습니다. 부울 필드를 무시하고 f.bar로 정렬합니다.
내가 알고있는 멍청한 짓이지만이 동작을 얻으려면 어떻게해야합니까?
감사
문자열 인 f.bar로 정렬하려는 linq 쿼리가 있지만 먼저 부울 필드 인 f.foo로 정렬하고 싶습니다. 아래 쿼리와 같습니다.
(from f in foo
orderby f.foo, f.bar
select f)
이것이 컴파일되지만 예상대로 작동하지 않습니다. 부울 필드를 무시하고 f.bar로 정렬합니다.
내가 알고있는 멍청한 짓이지만이 동작을 얻으려면 어떻게해야합니까?
감사
답변:
그것은 잘 작동합니다 false
-foo 값을 가진 엔티티를 먼저 정렬 한 다음 foo 값을 가진 엔티티를 정렬해야 true
합니다.
LINQ to Objects에서 확실히 작동합니다. 실제로 어떤 LINQ 공급자를 사용하고 있습니까?
다음 은 작동 하는 LINQ to Objects 예제입니다 .
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를 정렬합니다.
true로 목록 순서를 얻으면 다음 코드를 시도하십시오.
db.member.where(x=>x.id==memberId).OrderBy(x=>!x.IsPrimary?1:0).ToList();