3
私は熱心な読み込みと投影の両方を含み、問題を抱えている簡単なクエリを実行しようとしています。私はCodeFirst CTP5を使用していますが、私はこの問題がまっすぐEF4にも影響すると信じています。EF4 Include()with Projection
public List<ArticleSummary> GetArticles()
{
var articlesQuery = _db.Articles.Include(article => article.Category).Select(article => new ArticleSummary
{
Article = article,
CommentsCount = article.Comments.Count
});
return articlesQuery.ToList();
}
これはヌルされる物品のカテゴリプロパティに結果:
はここに私の最初のクエリです。私が投影を取り出すと、それはうまく動作します。 thisを読んだ後、それは私が投影後に含める行う必要があることを示唆しているように見えるので、私はにクエリを変更:
public List<ArticleSummary> GetArticles()
{
var articlesQuery = _db.Articles.Select(article => new ArticleSummary
{
Article = article,
CommentsCount = article.Comments.Count
});
articlesQuery = articlesQuery.Include(x => x.Article.Category);
return articlesQuery.ToList();
}
これはthis SO postに似ている(下記参照)例外が発生します。
「タイプ 『System.Linq.IQueryable
1' to type 'System.Data.Objects.ObjectQuery
1』にキャストできません。エンティティへのLINQ は エンティティデータモデルのプリミティブ型のキャストをサポートしています。」
どうすればいいですか?
おかげで、。現実には、この段階でToList()を実行するのではなく、Take()とSkip()をクエリに追加して実際に実行するPagedListコンストラクタにIQueryableを渡します。私は確かに、最初の部分でToList()をしないで、匿名型の代わりにtempエンティティを作成し、次にPagedListの処理を行い、最後にPagedList をPageList に変換するようにクエリを再配置できます。理想的ではない。他のオプションはありますか? –
@ zaph0d:おそらくCategoryをArticleSummaryクラスに追加することができるので、TempArticleSummaryクラスを使う必要はありません。それは痛くないだろうか? – LukLed
はい、それはきれいになるでしょう、そして、私は今、あなたの助けを大変感謝します。私はこのようにして私のモデルを汚染するのは好きではありませんが、EF4のジュリー・レーマンを見てみるといいかもしれません。 –