2016-04-13 18 views
11

でコレクションを含め、私はこれらのエンティティを持っている:私はBookIdを知っていればは、例えば、Entity Frameworkのコア

public class Book 
{ 
    [Key] 
    public string BookId { get; set; } 
    public List<BookPage> Pages { get; set; } 
    public string Text { get; set; } 
} 

public class BookPage 
{ 
    [Key] 
    public string BookPageId { get; set; } 
    public PageTitle PageTitle { get; set; } 
    public int Number { get; set; } 
} 

public class PageTitle 
{ 
    [Key] 
    public string PageTitleId { get; set; } 
    public string Title { get; set; } 
} 

は、どのように私は、すべてのPageTitlesをロードする必要がありますか?

ここでは、私はこれをやろうとしている方法です:

using (var dbContext = new BookContext()) 
{ 
    var bookPages = dbContext 
     .Book 
     .Include(x => x.Pages) 
     .ThenInclude(x => x.Select(y => y.PageTitle)) 
     .SingleOrDefault(x => x.BookId == "some example id") 
     .Pages 
     .Select(x => x.PageTitle) 
     .ToList(); 
} 
しかし、問題は、それは例外

ArgumentExceptionがスローされますことを、次のとおりです。X => {ページからプロパティ式を」 y in x select [y] .PageTitle} 'は無効です。式は、 プロパティアクセスを表す必要があります: 't => t.MyProperty'。 プロパティを複数指定する場合は、匿名タイプを使用します。 't => new {t.MyProperty1、 t.MyProperty2}'。パラメータ名:propertyAccessExpression

どうしたらよいですか?

答えて

27

ThenIncludeに直接PageTitleにアクセスしてみてください:

using (var dbContext = new BookContext()) 
{ 
    var bookPages = dbContext 
    .Book 
    .Include(x => x.Pages) 
    .ThenInclude(y => y.PageTitle) 
    .SingleOrDefault(x => x.BookId == "some example id") 
    .Select(x => x.Pages) 
    .Select(x => x.PageTitle) 
    .ToList(); 
} 
+9

それは作品がどのように?つまり、y.PageTitleと入力すると、PageTitleのIntellisenseフィールドはありませんが、動作します。 –

+1

https://github.com/dotnet/roslyn/issues/8237を参照してください。 – Smit

関連する問題