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 和 ProductName 的匿名类的 IEnumerable。

于 2013-10-01T01:16:28.140 回答