簡體   English   中英

Linq查詢以檢查並從字典項目列表中獲取字典項目

[英]Linq query to Check and get dictionary item from list of dictionary items

我有一個字典項目清單,

List<Dictionary<string,string>> lstOfDict = new List<Dictionary<string,string>>();

詞典項目:

<"name","Adam">
<"mail","abc@abc.com">
<"number",123>

這些字典項在列表lstOfDict中,我需要一個linq查詢來檢查列表是否包含具有鍵為“ mail”的字典項,如果是,則獲取字典項。

我努力了,

   var mail = from item in lstOfDict 
               where(x => x.ContainsKey("mail"))
               select item;

但是沒有結果,解決這個問題的任何想法都是有幫助的。 謝謝

您發布的代碼應該意味着mail是所有包含鍵“ mail”的字典的枚舉。 然后,您需要決定如何處理,例如:

var numberOfMatchingDictionaries = mail.Count();

...要么:

var firstMatchingDictionary = mail.FirstOrDefault();
if (firstMatchingDictionary != null)
{
    Console.WriteLine("Value is {0}", firstMatchingDictionary["mail"]);
}

...要么:

foreach(var dictionary in mail)
{
    Console.WriteLine("Value is {0}", dictionary["mail"]);
}
try this -

var o = lstOfDict.SelectMany(k => k).Where(key => key.Key == "mail").ToList();

基本上,這里的動機是,將Dictionary<string ,string>List展平,然后拉出具有key == "mail"的條目。

您可以使用Any方法做到這一點,就像這樣:

List<Dictionary<string, string>> lstOfDict = new List<Dictionary<string, string>>();            
lstOfDict.Add(new Dictionary<string, string> 
{ 
    ["name"] = "Adam", 
    ["mail"] = "abc@abc.com"
}); 

var containsEmail = lstOfDict.SelectMany(x => x).Where(x => x.Key == "mail");

嘗試這個

 lstOfDict.Where(x => x.ContainsKey("mail")).ToList();

這是另一種方法。

首先,創建一些模擬數據。

   List<Dictionary<string, string>> lstOfDict = new List<Dictionary<string, string>>();
   var dict1 = new Dictionary<string, string>();
   dict1.Add("name", "Adam");
   var dict2 = new Dictionary<string, string>();
   dict2.Add("mail", "abc@abc.com");
   var dict3 = new Dictionary<string, string>();
   dict3.Add("mail", "xyz@abc.com");
   lstOfDict.Add(dict1);
   lstOfDict.Add(dict2);
   lstOfDict.Add(dict3);

下面的查詢將為我們提供大量的電子郵件地址(集合中的集合)。

   var emails = lstOfDict.Where(d => d.ContainsKey("mail")).Select(d => d.Values).ToList();

列表中有多個詞典。 但是每本詞典只能有一個鍵為“ mail”的項目。 因此,調用First()應該是正確的。

   foreach (var email in emails)
    {
       Console.WriteLine(email.First());// here we are printing the email addresses.
    }

暫無
暫無

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

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