質問

私は、次の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.IOrderedQueryable' にタイプ '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を見て)

それはerroringされる理由は、現在、あなたは(基本的に)持っているということです

IOrderedQueryable<Post> posts = {snip};
...
posts = {something (Where) that returns IQueryable<Post>}

他のヒント

型のIQueryableのラムダexpressionisの結果。それはとてもあなたがたとえば、これを変換する必要があります最初にそれを使用するには、拡張メソッドを許可しません、リストます。

あなたが使用してこれを行うことができます。

posts = posts.ToList().Where(p => p.PostStatus.Id != 90);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top