453

Include() メソッドは、オブジェクトのリストに対して非常にうまく機能します。しかし、2 レベル深くする必要がある場合はどうすればよいでしょうか。たとえば、以下のメソッドは、ここに示すプロパティを含む ApplicationServers を返します。ただし、ApplicationsWithOverrideGroup は、他の複雑なオブジェクトを保持する別のコンテナーです。そのプロパティでも Include() を実行できますか? または、そのプロパティを完全にロードするにはどうすればよいですか?

現在のところ、この方法は次のとおりです。

public IEnumerable<ApplicationServer> GetAll()
{
    return this.Database.ApplicationServers
        .Include(x => x.ApplicationsWithOverrideGroup)                
        .Include(x => x.ApplicationWithGroupToForceInstallList)
        .Include(x => x.CustomVariableGroups)                
        .ToList();
}

Application または CustomVariableGroup プロパティ (下記) ではなく、Enabled プロパティ (下記) のみを設定します。どうすればこれを実現できますか?

public class ApplicationWithOverrideVariableGroup : EntityBase
{
    public bool Enabled { get; set; }
    public Application Application { get; set; }
    public CustomVariableGroup CustomVariableGroup { get; set; }
}
4

9 に答える 9

861

EF6の場合

using System.Data.Entity;

query.Include(x => x.Collection.Select(y => y.Property))

ラムダを取り込むusing System.Data.Entity;バージョンを取得するために必ず追加してください。Include


EF コアの場合

新しい方法を使用するThenInclude

query.Include(x => x.Collection)
     .ThenInclude(x => x.Property);
于 2012-05-30T19:38:58.390 に答える
82

あなたが正しく理解しているなら、ネストされたプロパティを含めることについて質問しています。もしそうなら :

.Include(x => x.ApplicationsWithOverrideGroup.NestedProp)

また

.Include("ApplicationsWithOverrideGroup.NestedProp")  

また

.Include($"{nameof(ApplicationsWithOverrideGroup)}.{nameof(NestedProp)}")  
于 2012-05-30T19:37:04.190 に答える
71

EF Core: "ThenInclude" を使用して複数のレベルを読み込む: 例:

var blogs = context.Blogs
    .Include(blog => blog.Posts)
        .ThenInclude(post => post.Author)
        .ThenInclude(author => author.Photo)
    .ToList();
于 2016-07-10T03:13:36.337 に答える
0

特定の問題にソリューションを追加します。含める必要がある同じレベルのコレクションが 2 つありました。最終的な解決策は次のようになりました。

var recipe = _bartendoContext.Recipes
    .Include(r => r.Ingredients)
    .ThenInclude(r => r.Ingredient)
    .Include(r => r.Ingredients)
    .ThenInclude(r => r.MeasurementQuantity)
    .FirstOrDefault(r => r.Id == recipeId);
if (recipe?.Ingredients == null) return 0m;
var abv = recipe.Ingredients.Sum(ingredient => ingredient.Ingredient.AlcoholByVolume * ingredient.MeasurementQuantity.Quantity);
return abv;

これは、特定のドリンク レシピの体積によるパーセント アルコールを計算しています。ご覧のとおり、材料コレクションを 2 回含めてから、その上に材料と量を含めました。

于 2020-10-05T21:10:03.483 に答える