Linq查询以检查并从字典项列表中获取字典项

本文关键字:字典 列表 获取 查询 检查 Linq | 更新日期: 2023-09-27 18:26:12

我有一个字典项目列表,

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;

但由于没有结果,任何解决这个问题的想法都是有帮助的。感谢

Linq查询以检查并从字典项列表中获取字典项

您可以使用任何方法来完成此操作,例如:

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");
try this -
var o = lstOfDict.SelectMany(k => k).Where(key => key.Key == "mail").ToList();

基本上,这里的动机是,使Dictionary<string ,string>List变平,然后拉出具有key == "mail"的条目。

尝试这个

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

发布的代码应该意味着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"]);
}

这里有另一种方法。

首先,创建一些模拟数据。

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

下面的查询将为我们提供电子邮件地址的IENumerable集合(集合中的集合)。

   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.
    }