C# 如何查找嵌套列表的min元素并返回其同级及其父ID
问题描述: 我有一个C# 如何查找嵌套列表的min元素并返回其同级及其父ID,c#,list,performance,linq,C#,List,Performance,Linq,问题描述: 我有一个制造商列表的场景,每个制造商都包含一个制造商ID和一个产品嵌套列表,其中包含一个产品ID和一个质量嵌套列表,其中包含一个质量ID和一个价格 --Manufacturers (List) ----ManufacturerId (string) ----Products (List) ------ProductId (string) ------Qualities (List) -QualityId (string) -Price (decimal) 或 然
制造商列表
的场景,每个制造商都包含一个制造商ID
和一个产品嵌套列表
,其中包含一个产品ID
和一个质量
嵌套列表,其中包含一个质量ID
和一个价格
--Manufacturers (List)
----ManufacturerId (string)
----Products (List)
------ProductId (string)
------Qualities (List)
-QualityId (string)
-Price (decimal)
或
然后通过SelectMany
对制造商和SelectMany
对产品构建了一个flattquality
列表:
List<FlattenQuality> flattenQualities = BuildFlattenQuality(..);
输出应为:
{
"Keys": [
"1-1-1", //The QualityId 1 of productId 1 of ManuId 1 is the cheapest
"2-1-1" //The cheapest sibling
]
}
我的问题:
如何在不使用其他型号污染我的应用程序的情况下实现所选按键的相同结果?无需再次迭代所有列表。您要做的是展平数据。为此:
var records =
manufacturers.SelectMany(m =>
m.Products.SelectMany(p =>
p.Qualities.Select(q => new
{
ManufacturerId = m.ManufacturerId,
ProductId = p.ProductId,
QualityId = q.QualityId,
Price = q.Price,
Key = string.Join("-", new string [] {m.ManufacturerId, p.ProductId, q.QualityId })
})
)
);
然后应用您的订购逻辑:
records.OrderBy(x => Array.IndexOf(productPriotizeList, x.ProductId))
.ThenBy(x => x.Price);
查看正在运行的演示。您要做的是展平数据。为此:
var records =
manufacturers.SelectMany(m =>
m.Products.SelectMany(p =>
p.Qualities.Select(q => new
{
ManufacturerId = m.ManufacturerId,
ProductId = p.ProductId,
QualityId = q.QualityId,
Price = q.Price,
Key = string.Join("-", new string [] {m.ManufacturerId, p.ProductId, q.QualityId })
})
)
);
然后应用您的订购逻辑:
records.OrderBy(x => Array.IndexOf(productPriotizeList, x.ProductId))
.ThenBy(x => x.Price);
查看正在运行的演示。使用匿名类型?@PavelAnikhouski不知道如何操作……如果您能提供给定输入和预期输出的示例,将非常有帮助。此外,您在问题开始处呈现的层次结构似乎与文本描述不符,文本描述是:“[…]嵌套的
质量列表
,其中包含质量ID
和制造商
的嵌套列表”-因此我将质量
视为嵌套的制造商
,但事实并非如此。嘿@HeyJude谢谢你的洞察力,我已经更新了这个问题。通过使用匿名类型?@PavelAnikhouski不知道怎么做……如果你能提供给定输入和预期输出的示例,那将非常有帮助。此外,您在问题开始处呈现的层次结构似乎与文本描述不符,文本描述是:“[…]嵌套的质量列表
,其中包含质量ID
和制造商
的嵌套列表”-因此我将质量
视为嵌套的制造商
,但是没有。嘿@HeyJude谢谢你的洞察力,我已经更新了问题。谢谢!查看更新的问题,我已经更新了输出示例谢谢!请参见更新的问题,我已经更新了输出示例
var records =
manufacturers.SelectMany(m =>
m.Products.SelectMany(p =>
p.Qualities.Select(q => new
{
ManufacturerId = m.ManufacturerId,
ProductId = p.ProductId,
QualityId = q.QualityId,
Price = q.Price,
Key = string.Join("-", new string [] {m.ManufacturerId, p.ProductId, q.QualityId })
})
)
);
records.OrderBy(x => Array.IndexOf(productPriotizeList, x.ProductId))
.ThenBy(x => x.Price);