首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IDictionary<string、IDictionary<string、ICollection<string>>>到链接

IDictionary<string、IDictionary<string、ICollection<string>>>到链接
EN

Stack Overflow用户
提问于 2011-05-04 07:31:26
回答 2查看 328关注 0票数 1

我一直在尝试将下面的foreach语句转换为LINQ语句,但似乎无法理解它。任何帮助都是受欢迎的。

代码语言:javascript
运行
复制
IDictionary<string, IDictionary<string, ICollection<string>>> Highlights { get; set; }

foreach (var r in matchingProducts.Highlights)
{
    string szKey = r.Key;
    var ar = r.Value.ToArray();
    foreach (var s in ar)
    {
        string szCat = s.Key;
        var sr = s.Value.ToArray();
        foreach (var t in sr)
        {
            string szName = t;
            //todo: update the corresponding matchingProduct records
            // using the return values from szKey, szCat, szName
        }
    }
}

matchingProducts

代码语言:javascript
运行
复制
public class Product {
    [SolrUniqueKey("id")]
    public string Id { get; set; }

    [SolrField("sku")]
    public string SKU { get; set; }

    [SolrField("name")]
    public string Name { get; set; }

    [SolrField("manu_exact")]
    public string Manufacturer { get; set; }

    [SolrField("cat")]
    public ICollection<string> Categories { get; set; }

    [SolrField("features")]
    public ICollection<string> Features { get; set; }

    [SolrField("price")]
    public decimal Price { get; set; }

    [SolrField("popularity")]
    public int Popularity { get; set; }

    [SolrField("inStock")]
    public bool InStock { get; set; }

    [SolrField("timestamp")]
    public DateTime Timestamp { get; set; }

    [SolrField("weight")]
    public double? Weight { get; set;}
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-04 07:37:43

您可以只枚举以下LINQ查询

代码语言:javascript
运行
复制
var query = from r in Highlights
            let szKey = r.Key
            let szValue = r.Value
            from s in szValue
            let szCat = s.Key
            let sr = s.Value
            from t in sr
            let szText = t
            select new { Key = szKey, Category = szCat, Text = szText };

// or, also, you can use this small query
var query = from r in Highlights
            from s in r.Value
            from t in s.Value
            select new {Key = r.Key, Category = s.Key, Text = t};    

foreach(var element in query)
{
    ProcessUpdate(element.Key, element.Category, element.Text);
}    
票数 1
EN

Stack Overflow用户

发布于 2011-05-04 07:37:22

您可以通过编写以下内容将字典展平到最内层集合中的项

代码语言:javascript
运行
复制
dict.Values.SelectMany(d => d.Values).SelectMany(c => c)

在这些lambda表达式中,d是内部字典,c是最里面的ICollection

你可以像这样获取外键:

代码语言:javascript
运行
复制
dict.SelectMany(kvpOuter => 
    kvpOuter.Value.SelectMany(kvpInner => 
        kvpInner.Value.Select(item => 
            new { 
                OuterKey = kvpOuter.Key,
                InnerKey = kvpInner.Key,
                Item = item,
            }
        )
    )
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5876906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档