【发布时间】:2015-12-21 03:38:45
【问题描述】:
我正在努力解决这个问题,并且已经搜索了多种方法,但似乎找不到答案。我从其他人那里继承了这个应用程序,需要向应用程序添加一些功能。我以前没有过多地使用字典和 linq,所以我一直在搜索并尝试获取知识来做我需要做的事情。
有一个类具有以下属性(删除了一些本次讨论不需要的属性):
class EmailRecord
{
public Dictionary<string, List<string>> emails = new Dictionary<string, List<string>>();
public string RecordID { get; set; }
[后跟其他属性和构造函数...]
创建对象时, emails 属性的键中会包含一个模板字符串,值中包含一个包含电子邮件地址的字符串列表。出于我的目的,我不需要知道密钥中的内容。
我有一个名为 allRecords 的 EmailRecord 对象列表。我需要查询 allRecords 以获取所有 EmailRecord 对象的列表,其中电子邮件字典属性的值列表包含我存储在名为 recipientEmail 的变量中的特定电子邮件地址。密钥无关紧要,电子邮件显示多少次也无关紧要。如果电子邮件出现在 emails 属性值的任何位置,我只需要包含在结果中的对象实例。在 EmailRecord 的一个实例中,电子邮件字典属性可能有两个键,并且在每个键中,值的字符串列表中的多个电子邮件。我不需要限制特定的键,我只需要知道电子邮件是否存在于该字典中任何位置的电子邮件字符串列表中的任何位置。
我尝试了一些东西,最新的是这个(不起作用):
var results = EmailRecords
.SelectMany(x => x.emails)
.Where(x => x.Value.Contains(recipientEmail));
上面似乎只是返回字典属性,而不是整个对象。
我希望能够通过以下方式遍历结果:
foreach (EmailRecord foundRecord in results) {
...do work here
}
在我尝试学习 Linq 时有什么想法或建议可以帮助我吗?提前感谢您提供的任何帮助。
【问题讨论】:
-
所以你想遍历整个字典中的
List<string>,并检查它是否包含recipientEmail?如果是的话,做一些工作吗? -
我想获取 EmailRecord 对象的结果列表,其中特定电子邮件位于该电子邮件字典中的任何位置。然后我将遍历该结果集。这有意义吗?
-
但我在您的示例代码中没有看到任何
List<EmailRecord>变量可以循环 -
因此,如果 EmailRecords(EmailRecord 对象列表)有 3 个 EmailRecord 对象,并说前两个对象将“test@test.com”作为对象的电子邮件字典中的值之一,第三个对象对象根本没有显示该电子邮件,那么链接查询应该只给我前两个对象的结果。这就是试图完成但无法弄清楚的事情。
-
好的。检查我的更新答案
标签: c# linq dictionary