반응형
부울에 의한 Linq 순서
문자열 인 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);
}
}
}
그냥 이것을하고 싶었고 암시적인 순서가없는 것처럼 보입니다. 더 명확하게하기 위해 다음을 수행했습니다.
Something.OrderBy(e=>e.SomeFlag ? 0 : 1)
참에서 거짓으로 분류합니다.
사용되는 순서에 대해 더 명확하게하기 위해.
Something.OrderBy(e => e.SomeFlage, new BooleanComparer());
public class BooleanComparer : IComparer<bool>
{
public int Compare(bool x, bool y)
{
int p = x ? 1 : 0;
int q = y ? 1 : 0;
return p - q;
}
}
목록 순서가 true이면 다음 코드를 시도하십시오.
db.member.where(x=>x.id==memberId).OrderBy(x=>!x.IsPrimary?1:0).ToList();
참고 URL : https://stackoverflow.com/questions/5408177/linq-order-by-boolean
반응형
'developer tip' 카테고리의 다른 글
속성에 대한 상속은 어떻게 작동합니까? (0) | 2020.08.15 |
---|---|
Github Atom 편집기에서 숨겨진 (점) 파일 숨기기 (0) | 2020.08.14 |
IntelliJ를 사용하여 클래스 다이어그램 생성 (0) | 2020.08.14 |
: after를 사용하여 부동 요소 지우기 (0) | 2020.08.14 |
buider.show ()의 "android.view.WindowManager $ BadTokenException : 창을 추가 할 수 없습니다." (0) | 2020.08.14 |