2017-08-03 6 views
1

私のLINQクエリIncludeパス式は、そのタイプで定義されたナビゲーションプロパティを参照する必要があります。

model.Questions = db.Questions 
        .Where (x => x.CategoriesID == categoryId) 
        .Include (qc => qc.QuestionCounters.Where(x => x.MemberID == User.Identity.GetUserId())) 
        .Include (qf => qf.QuestionFavorites.Where(x => x.MemberId == User.Identity.GetUserId())) 
        .Include (qt => qt.QuestionTags) 
        .ToList(); 

は、インクルードパス式は、ナビゲーションプロパティを参照する必要があります タイプに定義された」というエラー

を生成します。参照ナビゲート のプロパティとコレクションの検索のためのSelect演算子 プロパティには点線のパスを使用してください。

なぜこのようなことが起こりますか?

+0

を使用することですインクルードを使用してデータを選択します。これにはすでに多くの記事があります。 – Equalsk

+0

@エスクルスクどのような選択肢がありますか?これは私を変えます – OrElse

+0

重複 - このhttps://stackoverflow.com/questions/15980665/ef-lambda-the-include-path-expression-must-refer-to-a-navigation-propertyとこのhttps:/を参照してください。 /stackoverflow.com/questions/38676029/the-include-path-expression-must-refer-to-a-navigation-property-defined-on-the-t。 –

答えて

0

IQueryable<HomeViewModel> test = db.Questions 
            .Where(x => x.CategoriesID == categoryId) 
            .Select(q => q.ToHomeViewModel(User.Identity.GetUserId())); 

、すべての後に

public static HomeViewModel ToHomeViewModel(this Question q, string memberId) 
{ 
    return new HomeViewModel() 
    { 
     QuestionCounters = q.QuestionCounters.Where(x => x.MemberID == memberId), 
     QuestionFavorites = q.QuestionFavorites.Where(x => x.MemberId == memberId), 
     QuestionTags = q.QuestionTags 
    }; 
} 

どのように必要includeになってしまいましたか? ;インクルードで)

おかげで何人かの人々がコメントしたよう

1

@jleコメントのために、あなたはWhereメソッドを使用することはできません。

免責事項:私はEntity Framework Plus

EF +クエリIncludeFilter機能は、関連するエンティティをフィルタリングできるように、プロジェクトの所有者です。

model.Questions = db.Questions 
       .Where (x => x.CategoriesID == categoryId) 
       .IncludeFiler (qc => qc.QuestionCounters.Where(x => x.MemberID == User.Identity.GetUserId())) 
       .IncludeFiler (qf => qf.QuestionFavorites.Where(x => x.MemberId == User.Identity.GetUserId())) 
       .IncludeFiler (qt => qt.QuestionTags) 
       .ToList(); 

ウィキ:EF+ Query IncludeFilter

溶液#2

別の技術は、あなたがすることはできません(私のライブラリは、ボンネットの下に何をすべきかである)投影

bd.Questions 
    .Select(q = new { 
     Question = q, 
     QuestionCounters = q.QuestionCounters.Where(x => x.MemberID == memberId), 
     QuestionFavorites = q.QuestionFavorites.Where(x => x.MemberId == memberId), 
     QuestionTags = q.QuestionTags 
    }) 
    .ToList() 
    .Select(x => x.Question) 
    .ToList(); 
関連する問題