有一个名为Company
的自定义类,我希望根据我传递的单个Company.AccountID
返回此类的单个实例。我有大部分查询,但我搞砸了某个地方。有人可以帮助我吗?
Company cmp = Companies.Select(comp => comp.AccountID == accountID).Select(comp => new Company());
答案 0 :(得分:4)
使用Enumerable.FirstOrDefault
之类的:
Company obj = Companies.FirstOrDefault(comp=> comp.AccountID == accountID);
在当前查询中,您正在选择布尔运算的结果。你需要的是Where
喜欢:
Companies.Where(comp => comp.AccountID == accountID)
这会为您提供符合条件的IEnumerable<Company>
个对象,之后您可以在查询结尾添加FirstOrDefault /First
,如:
Company c = Companies.Where(comp => comp.AccountID == accountID).FirstOrDefault();
如果找不到匹配的记录,请记住FirstOrDefault
将返回null。另一方面,First
将抛出异常。
要从集合中选择一条记录,您的选项为First / FirstOrDefault,Single / SingleOrDefault,Last / LastOrDefault 。 (Last / LastOrDefault仅通过LINQ to objects支持,实体框架不支持)
答案 1 :(得分:3)
您有多种选择,您必须选择最适合您的选择。
如果您希望根据LINQ查询进行多次匹配,但是如果没有至少一个匹配则抛出异常,请使用First
:
var company = Companies.First(c => c.AccountID == accountID);
如果您希望根据LINQ查询进行多次匹配,请使用FirstOrDefault
,如果没有匹配则需要null
。
var company = Companies.FirstOrDefault(c => c.AccountID == accountID);
如果您的查询应该只返回一条记录,请使用Single
。如果有任何其他结果,将抛出异常。
var company = Companies.Single(c => c.AccountID == accountID);
如果您的查询应返回0或1条记录,请使用SingleOrDefault
。如果未找到记录,则会返回null
。
var company = Companies.SingleOrDefault(c => c.AccountID == accountID);
请务必做出正确的选择。根据您选择的方法,现在将向未来的其他开发人员表达您的意图,以便错误不会因为查询过于通用而慢慢自我介绍。