0

次のシナリオの linq クエリを思い付くことができません。

public class Product
{
    public virtual string ProductName { get; set; }
    public virtual IList<SubProduct> SubProducts { get; set; }
}

public class SubProduct
{
    public string SubProductName { get; set; }

    public int SubProductTypeId { get; set; }
}

public class SubProductType
{
    public int SubProductTypeId{ get; set; }
    public string Description { get; set; }
}

var productList = List<Product>();

var subProductTypeLlist = List<SubProductType>();

製品のリストがあり、各製品にはサブ製品のリストがあります。{ProductName, Description} を表すクエリを取得したいと考えています。linq クエリの書き方を教えてください。

4

1 に答える 1

1

このような何かがうまくいくはずです:

var result = productList
    .SelectMany(p => p.SubProducts
        .Select(sp => new { SubProduct = sp, ProductName = p.ProductName }))
    .Select(sp => 
        new { Description = subProductTypeList
            .Single(spt => spt.SubProduct.SubProductTypeId == sp.SubProductTypeId).Description,
            ProductName = sp.ProductName })

SelectMany では、最初に内部 IEnumerable (IList は IEnumerable を実装) で Select を実行して、各 SubProduct オブジェクトを SubProduct オブジェクトと ProductName を保持する匿名クラスに変換します。SelectMany はそれをフラット リストに変換します。次に、そのリストで Select を使用して新しい匿名クラスを再度作成します。今回は、subProductTypeList から Description を取得します。結果は、メンバ Description および ProductName を持つ匿名クラスの IEnumerable です。

于 2013-10-01T01:16:28.140 に答える