Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq选择了许多用法_C#_Linq - Fatal编程技术网

C# Linq选择了许多用法

C# Linq选择了许多用法,c#,linq,C#,Linq,我无法为以下场景提供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 i

我无法为以下场景提供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{get;set;}
公共虚拟IList子管道{get;set;}
}
公共级子管道
{
公共字符串子管道名称{get;set;}
public int SubProductTypeId{get;set;}
}
公共类子管道类型
{
public int SubProductTypeId{get;set;}
公共字符串说明{get;set;}
}
var productList=List();
var subducttypellist=List();

我有一个产品列表,每个产品都有子产品列表。我想得到表示{ProductName,Description}的查询。请建议如何编写linq查询。

类似的内容应该可以做到:

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中获取描述。结果是一个匿名类的IEnumerable,包含成员描述和产品名称。

非常感谢您的快速回复和帮助。我根据需要修改了结果查询&现在正在工作。var products=新列表();var subductTypeList=新列表();var typeListMap=subProductTypeList.ToDictionary(x=>x.SubProductTypeId,x=>x.Description);var results=productList.SelectMany(p=>p.SubProducts,(t,i)=>new{ProductName=t.ProductName,Description=typeListMap[i.SubProductTypeId]})。ToList();