2017-08-17 14 views
0

私は製品を持っていますが、この製品は言語ごとにいくつかの説明を持つことができます。エンティティフレームワークLinq Include()は条件付きでネストされています

product.Referenceと​​に基づいておりますが、言語コードと一致する商品と説明があります。私はEFコア2.0を使用しています

私は2つの分離されたクエリでそれを行うことができますが、可能であれば私は1つを望みます。

var product = _context.Products 
    .Where(x => x.Reference == "3265709") 
    .Include(x => x.ProductDescriptions) 
    .ThenInclude(x => x.Where(lg => lg.Language.Code == "EN").Select(z => z.Language)) 
    .ToList(); 

任意のアイデア:

は、私はこれを試してみましたか?

おかげで、

public class Product 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Reference { get; set; } 
    public ICollection<ProductDescription> ProductDescriptions{ get; set; } 
} 

public class ProductDescription 
{ 
    public int Id { get; set; } 
    public string Short { get; set; } 
    public string Complete { get; set; } 
    public Language Language{ get; set; } 
    public Product Product { get; set; } 
} 

public class Language 
{ 
    public int Id { get; set; } 
    public string Code { get; set; } 
    public string Name { get; set; } 
} 
+2

使用した2つのクエリを投稿できますか? –

+0

私は2つのクエリでそれをどうしているのか見ていますが、まだしていません。私は最初に一つの質問をしたいと思います。 –

+1

あなたの質問はクリスタルではありません(少なくとも私に)。 2つのクエリのソリューションを表示すると、他のユーザーが必要とするものを正確に理解するのに役立ちます。 –

答えて

1

は、あなたがこのような何かを行うことができますか? .Any()の部分も必要ないかもしれません。

var product = _context.Products.Where(x => x.Reference == "3265709" && x.ProductDescriptions.Any(a => a.Language.Code == "EN")) 
    .SelectMany(x => x.ProductDescriptions.Where(z => z.Language.Code == "EN").Select(a => a.Language)).ToList(); 

EDIT:

は、これはあなたが探しているものですか?これにより、参照コードが指定された製品のリストと、言語コードに基づいてフィルタされた製品説明リストが表示されます。

var product = _context.Products.Where(x => x.Reference == "3265709" && x.ProductDescriptions.Any(a => a.Language.Code == "EN")).Select(x => new Product { 
     Id = x.Id, 
     Name = x.Name, 
     ProductDescriptions = x.ProductDescriptions.Where(a => a.Language.Code == "EN").ToList(), 
     Reference = x.Reference 
}); 
+0

結果はProductDescriptionのある製品ではなく、いくつかのアイデアがあります。 –

+0

ああ、私はあなたのlinq .Select(z => z.Language)のこの部分に基づいて、言語のリストを返すと思っていました。 –

+0

コードの前の行を読んでください:) –

関連する問題