Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从字典中获取单个值<;关键、价值>;给定属于类型值的属性_C#_.net_Linq_Dictionary_Lambda - Fatal编程技术网

C# 如何从字典中获取单个值<;关键、价值>;给定属于类型值的属性

C# 如何从字典中获取单个值<;关键、价值>;给定属于类型值的属性,c#,.net,linq,dictionary,lambda,C#,.net,Linq,Dictionary,Lambda,假设我有这本字典: Dictionary<Guid, Person> people = new Dictionary<Guid, Person>(); 我知道每个人都有不同的Ssn,所以我只返回列表中第一个值(因为列表只有一个值)。否则返回null 我不喜欢这个解决方案的一点是,我必须从linq查询中获取一个列表,而不是一个值。是否存在可以从字典中获取单个值的linq查询 使用FirstOrDefault return people.Values.FirstOrDefa

假设我有这本字典:

Dictionary<Guid, Person> people = new Dictionary<Guid, Person>();
我知道每个人都有不同的
Ssn
,所以我只返回列表中第一个值(因为列表只有一个值)。否则返回null


我不喜欢这个解决方案的一点是,我必须从linq查询中获取一个列表,而不是一个值。是否存在可以从字典中获取单个值的linq查询

使用
FirstOrDefault

return people.Values.FirstOrDefault(p => p.SSN == socialSecurityNum);

使用
FirstOrDefault

return people.Values.FirstOrDefault(p => p.SSN == socialSecurityNum);


嗯,谢谢。我不知道为什么我没有想到这一点。@Drew,没问题:)@Drew如果你想在有多人患有此病的例外情况下获得例外,那么我们最好考虑SingleOrDefaultsocialSecurityNum@HaraldCoppoolse,根据问题,
FirstOrDefault
正是OP想要的,谢谢。我不知道为什么我没有想到这一点。@Drew,没问题:)@Drew如果你想在有多人患有此病的例外情况下获得例外,那么我们最好考虑SingleOrDefaultsocialSecurityNum@HaraldCoppoolse,根据问题,
FirstOrDefault
正是OP通常想要的,你试图设计你的代码,这样你就不会有像那样低效的代码…@Phil1970你介意详细说明吗?我想尽可能地改进我的代码,但我不太清楚你的意思。好吧,如果你有1000000人,你必须检查所有人是否有社会保险号码。通常,您会将数据存储在数据库中,并为该列创建索引,然后编写一个查询来单独获取这些人。本质上,如果可能的话,您试图避免使用O(n)搜索算法。顺便问一下Guid与SSN的关系。也许,字典应该使用SSN作为键。@Philla,我明白了,谢谢。这实际上只是一个例子,因为我不想让这个问题过于做作,因为我实际上正在处理的是什么。这本字典最多会有十几个或两个条目,所以我认为这种方法会很好。但是谢谢你的建议,当它更大的时候,我想我应该在问题中说明。通常,你会尝试设计你的代码,这样你就不会有像那样低效的代码…@Phil1970,你介意详细说明吗?我想尽可能地改进我的代码,但我不太清楚你的意思。好吧,如果你有1000000人,你必须检查所有人是否有社会保险号码。通常,您会将数据存储在数据库中,并为该列创建索引,然后编写一个查询来单独获取这些人。本质上,如果可能的话,您试图避免使用O(n)搜索算法。顺便问一下Guid与SSN的关系。也许,字典应该使用SSN作为键。@Philla,我明白了,谢谢。这实际上只是一个例子,因为我不想让这个问题过于做作,因为我实际上正在处理的是什么。这本字典最多会有十几个或两个条目,所以我认为这种方法会很好。但是谢谢你的建议,当它更大的时候,我想我应该在问题中说明这一点。