我如何从列表中查询一个对象而不获得集合
本文关键字:集合 一个对象 查询 列表 | 更新日期: 2023-09-27 17:53:29
public static Treatment Find(int id, List<Treatment> treatments)
{
var treatment = from t in treatments
where t.ID == id
select new Treatment(t.ID, t.Name);
return treatment;
}
在上面的例子中,我试图从大约20个对象的列表中选择一个对象。使用什么语法(如果存在的话)从该查询中只返回一个对象,而不是只包含一个对象的集合?
使用FirstOrDefault
return treatment.FirstOrDefault();
返回序列中的第一个对象,否则返回类型的默认值,引用类型返回null,值类型返回默认值(无论类型是什么)。
使用Enumerable.FirstOrDefault(Func<T, bool> predicate)
扩展方法,该方法从序列匹配谓词返回第一项,或者如果没有这样的项,则返回默认值T (null为引用类型):
Treatment treatment = treatments.FirstOrDefault(t => t.ID == id);
几乎和
一样treatments.Where(t => t.ID == id).FirstOrDefault()
// or treatment.FirstOrDefault()
但它有更好的性能(理论上)。
所以你有List<T>
,你也可以使用它的Find(Predicate<T> match)
方法:
Treatment treatment = treatments.Find(t => t.ID == id);
如果你不关心是否有多个匹配,或者是否没有匹配,因此你只想要第一个匹配,如果它存在(或null,如果不存在,治疗是一个引用类型):
return treatments.FirstOrDefault(t => t.ID == id);
如果你想在没有匹配的情况下显示错误,但你不关心是否有多个匹配:
return treatments.First(t => t.ID == id);
如果您希望有多个匹配时显示错误,但不关心是否没有匹配:
return treatments.SingleOrDefault(t => t.ID == id);
如果你想在没有匹配项或多于一个匹配项时显示错误:
return treatments.Single(t => t.ID == id);