C# Linq选择了许多用法
我无法为以下场景提供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
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();