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);