문제

다음 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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top