复杂词典中的Linq查询

时间:2016-07-10 18:23:33

标签: c# .net linq

我有像

这样的词典
Dictionary<int?, CompositeAccount> dicAccount = new Dictionary<int?, CompositeAccount>();

CompositeAccount类型中有个人列表:

List<Individuals> individuals

在个人类型中,有一个属性Name

现在我想在dicAccount中使用Linq,并获取名称为Divyam的个人类型数据。

有人可以帮我解决问题吗?

由于

3 个答案:

答案 0 :(得分:1)

所以你想选择 Name = Divyam 的个人。然后,使用Linq:

List<Individuals> results =
    dicAccount.Values.Where(x => x.Individuals != null)
                .SelectMany(x => x.Individuals)
                .Where(indv => indv != null && indv.Name == "Divyam").ToList();

使用dicAccount.Values.SelectMany(x => x.Individuals)列出整个词典中的所有个人。

然后使用Where查找具有指定条件的记录( Name ==“Divyam”此处)。

然后使用Select检索整个Individuals对象。

获得一个人(第一次出现):

  Individuals divyam =
    dicAccount.Values.Where(x => x.Individuals != null)
                .SelectMany(x => x.Individuals)
                .FirstOrDefault(indv => indv != null && indv.Name == "Divyam");

请注意,如果找不到包含该名称的记录,则divyam为空。如果要在没有找到异常的情况下抛出异常,请使用.First();而不是FirstOrDefault();如果您有多个具有该名称的记录,则需要抛出异常,那么您需要使用{{1 }}

答案 1 :(得分:0)

var results = dicAccount
    .SelectMany(kv => kv.Value.individuals)
    .Where(i => i.Name.Equals("Divyam"))
    .ToList();

答案 2 :(得分:0)

如果您更喜欢Lambda语法

Individuals result = dicAccount.Values.SelectMany(c => c.individuals).SingleOrDefault(i => i.Name == "Divyam");