簡體   English   中英

使用逗號分隔符分割字符串后,將linq的結果存儲在具有鍵和值的鍵值對中

[英]Storing result of linq in keyvaluepair with key and value after spliting the String using comma seperator

我無法獲得所需的結果,請仔細閱讀。

我打電話給liq查詢,這將給我結果

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

我希望在拆分它們后像鍵和值格式一樣...

key            value
99             5000199
85             5000185

在列表中,例如key應為99,其值應為5000199,second key應為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();

像這樣。

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

因此,基本上,您想要根據鍵值對在兩個集合中的索引進行操作嗎?

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

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

讓事情變得簡單。

采用

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

那你可以做

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM