使用逗号分隔符拆分String后,使用键和值存储linq在keyvaluepair中的结果

时间:2013-09-18 08:54:33

标签: c# linq

我无法得到我需要的结果 请仔细阅读。

我正在调用liq查询,这会给我一些像

的结果
"99,85,34,20,1,0.5" as key
"5000199,5000185,5000134,5000120,5000101,5000005"

我希望在分割它们之后就像键和值格式一样......比如

key            value
99             5000199
85             5000185
列表中的

键应为99,其值应为5000199 第二个键应为85,其值应为5000185

我正在使用的查询是

var pp = (from a in dc.MediaTypeMasters 
         where a.MediaTypeID == 153 && 
               a.ContentTypeForBilling == "valuepack" 
        select new KeyValuePair<String, String>
                               (a.PartialPricePoints, a.ContentTypeID))
               .ToList();

喜欢这个。

4 个答案:

答案 0 :(得分:4)

使用LINQ中的Zip方法:

var keys = "99,85,34,20,1,0.5";
var values = "5000199,5000185,5000134,5000120,5000101,5000005";

var results = keys.Split(',').Zip(values.Split(','), (k, v) => 
                        new KeyValuePair<int, int>(int.Parse(k), int.Parse(v)));

然后您也可以创建Dicrionary<int, int>

var dict = results.ToDictionary(x => x.Key, x => x.Value);

答案 1 :(得分:1)

所以基本上你想根据两个集合中的索引来获得键值对吗?

string[] first = str1.Split(',');
string[] second= str2.Split(',');
IEnumerable<KeyValuePair<string, string>> pairs = first
    .Select((s, i) => new KeyValuePair<string, string>(s, second.ElementAtOrDefault(i)));

请注意,如果第二个集合不包含与Enumerable.ElementAtOrDefault一样多的项目,则null会返回first

答案 2 :(得分:0)

    string key = "99,85,34,20,1,0.5";
    string val = "5000199,5000185,5000134,5000120,5000101,5000005";

    var keyArr = key.Split(',');
    var valArr = val.Split(',');
    var dictionary = new Dictionary<string, string>();
    for (int i = 0; i < keyArr.Length; i++)
    {
        dictionary.Add(keyArr[i], valArr[i]);
    }

答案 3 :(得分:0)

简单易行。

使用

var pp = (from a in dc.MediaTypeMasters where a.MediaTypeID == 153 && a.ContentTypeForBilling == "valuepack" a).ToList();

然后你可以做

var dictionary = pp.ToDictionary(p => p.PartialPricePoints);