iqueryable <>을 iOrderedQueryable 오류로 변환 할 수 없습니다
-
20-09-2019 - |
문제
다음 LINQ 코드가 있습니다.
var posts = (from p in db.Posts
.Include("Site")
.Include("PostStatus")
where p.Public == false
orderby p.PublicationTime
select p);
if (!chkShowIgnored.Checked) {
posts = posts.Where(p => p.PostStatus.Id != 90);
}
마지막 줄 (여분의 위치)은 나에게 오류를주고 있습니다.
'System.linq.iqueryable'유형을 암시 적으로 변환 할 수 없습니다.
이것이 무엇을 의미하는지 잘 모르겠습니다 ...
이 오류가 발생하는 이유는 무엇입니까?
쿼리에 "orderby"조항을 추가 한 후에는 잘 정리하기 전에 나타나서 진행되는 일이 많이 있지만 손가락을 넣을 수는 없습니다.
해결책
선언 해보세요 posts
구체적으로 IQueryable<Post>
보다는 var
(픽업 할 것입니다 IOrderedQueryable<Post>
(여전히 할 것입니다 ~이다 주문).
또는 다시 구조를 다시 구조화하여 우리는 끝에 주문하여 (선택적으로) 가져올 수 있도록합니다. where
중간에:
var posts = from p in db.Posts
.Include("Site")
.Include("PostStatus")
where p.Public == false
select p);
if (!chkShowIgnored.Checked) {
posts = posts.Where(p => p.PostStatus.Id != 90);
}
var finalQuery = posts.OrderBy(p => p.PublicationTime);
(분명히, 우리는 본다 finalQuery
)
그것이 오류가 발생한 이유는 현재 (본질적으로) 가지고 있기 때문입니다.
IOrderedQueryable<Post> posts = {snip};
...
posts = {something (Where) that returns IQueryable<Post>}
다른 팁
유형 iqueryable의 Lambda Expressionis의 결과. 확장 방법을 허용하지 않으므로 먼저 사용하려면 예를 들어 목록으로 변환해야합니다.
당신은 이것을 사용하여 할 수 있습니다
posts = posts.ToList().Where(p => p.PostStatus.Id != 90);
제휴하지 않습니다 StackOverflow