通过将字符串类型列表设置为字典来创建字典

时间:2015-06-10 19:37:45

标签: c# linq dictionary

我正在尝试使用类型字符串列表(productIds)创建此字典,但它是错误的:

错误的部分是p =>号码: 无法隐式转换类型'字符串'到' System.Collections.Generic.IEnumerable'

对我来说没有意义,因为p => p使它成为第一个参数,然后将新的产品类别列表传递到第二个参数中。

Dictionary<string, IEnumerable<string>> missingProducts =
    productIds.ToDictionary<string, IEnumerable<string>>(
        p => p, p => p 
        new List<string>(productCategories));

以下是我试图转换的VB.NET中的一个工作示例:

Dim productCategories As IList(Of String) = (From pc In prodCategories Select pc.CategoryName).ToList()

Dim missingProducts As Dictionary(Of String, IList(Of String)) = productIds.ToDictionary(Of String, IList(Of String))(Function(p) p, Function(p) New List(Of String)(productCategories))

2 个答案:

答案 0 :(得分:6)

ToDictionary的第二个参数也是Func(第一个:键选择器,第二个:值选择器),因此您也必须传入p

第二:signature of the call to ToDictionary is wrong

Dictionary<string, IEnumerable<string>> missingProducts =
productIds.ToDictionary<string, string, IEnumerable<string>>(
    p => p, 
    p => new List<string>(productCategories));

答案 1 :(得分:1)

我认为这两个论点都必须是谓词:

Dictionary<string, IEnumerable<string>> missingProducts =
    productIds.ToDictionary<string, IEnumerable<string>>(
        p => p, 
        p = > new List<string>(productCategories));
编辑:我为重复的答案道歉,我在输入这个时错过了另一个,虽然我可能能够帮助你解决新问题,避免给每个值列出相同的列表,你可以做一些一种比较机制来预测&#34; p&#34;就这样:

Dictionary<string, IEnumerable<string>> missingProducts =
    productIds.ToDictionary<string, IEnumerable<string>>(
        p => p, 
        p = > productCategories.Where(category => category {someOperationHere} p));

或者,如果你有某种类别的主列表,我不知道你有什么,但是:

Dictionary<string, IEnumerable<string>> missingProducts =
    productIds.ToDictionary<string, IEnumerable<string>>(
        p => p, 
        p = > masterCategories.Where(category => p.categories.Contains(category)));