我到处搜索,并没有真正找到一个明确的答案,什么时候你想使用. first,什么时候你想使用. firstordefault与LINQ。
什么时候你想用。first ?只有当你想捕捉异常,如果没有结果返回哪里?
var result =列表。Where(x => x == "foo").First();
什么时候使用。firstordefault ?当你总是想默认类型,如果没有结果?
var result =列表。Where(x => x == "foo").FirstOrDefault();
说到这,那塔克呢?
var result =列表。Where(x => x == "foo").Take(1);
另一个需要注意的区别是,如果您在生产环境中调试应用程序,您可能无法访问行号,因此识别方法中哪个特定的. first()语句抛出异常可能很困难。
异常消息也不包括您可能使用过的任何Lambda表达式,这会使任何问题更难调试。
这就是为什么我总是使用FirstOrDefault(),即使我知道空条目将构成异常情况。
var customer = context.Customers.FirstOrDefault(i => i.Id == customerId);
if (customer == null)
{
throw new Exception(string.Format("Can't find customer {0}.", customerId));
}