我有像
这样的词典Dictionary<int?, CompositeAccount> dicAccount = new Dictionary<int?, CompositeAccount>();
在CompositeAccount
类型中有个人列表:
List<Individuals> individuals
在个人类型中,有一个属性Name
。
现在我想在dicAccount
中使用Linq,并获取名称为Divyam
的个人类型数据。
有人可以帮我解决问题吗?
由于
答案 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");