我到处搜索,并没有真正找到一个明确的答案,什么时候你想使用. 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);


当前回答

这种类型的函数属于元素操作符。下面定义了一些有用的元素操作符。

第一/ FirstOrDefault 去年/ LastOrDefault 单/ SingleOrDefault

当需要根据特定条件从序列中选择单个元素时,我们使用元素操作符。这里有一个例子。

  List<int> items = new List<int>() { 8, 5, 2, 4, 2, 6, 9, 2, 10 };

First()操作符返回序列满足条件后的第一个元素。如果没有找到元素,则抛出异常。

Int result = items。Where(item => item == 2).First();

FirstOrDefault()操作符返回满足条件后序列的第一个元素。如果没有找到元素,则返回该类型的默认值。

Int result1 = items。Where(item => item == 2).FirstOrDefault();

其他回答

Others have very well described the difference between First() and FirstOrDefault(). I want to take a further step in interpreting the semantics of these methods. In my opinion FirstOrDefault is being overused a lot. In the majority of the cases when you’re filtering data you would either expect to get back a collection of elements matching the logical condition or a single unique element by its unique identifier – such as a user, book, post etc... That’s why we can even get as far as saying that FirstOrDefault() is a code smell not because there is something wrong with it but because it’s being used way too often. This blog post explores the topic in details. IMO most of the times SingleOrDefault() is a much better alternative so watch out for this mistake and make sure you use the most appropriate method that clearly represents your contract and expectations.

我发现了一个网站,它似乎解释了对FirstOrDefault的需求 http://thepursuitofalife.com/the-linq-firstordefault-method-and-null-resultsets/ 如果查询没有结果,并且您想调用First()或Single()来获得单行…您将得到一个“序列不包含元素”异常。

免责声明:我从未使用过LINQ,所以如果这是错误的,我很抱歉。

第一:

返回序列的第一个元素 抛出异常:结果中没有元素 使用when:当期望有多个元素,而您只想要第一个元素时

FirstOrDefault:

返回序列的第一个元素,如果没有找到元素,则返回默认值 抛出异常:仅当源为空时 使用when:当期望有多个元素,而您只想要第一个元素时。同样,结果为空也是可以的

来自:http://www.technicaloverload.com/linq-single-vs-singleordefault-vs-first-vs-firstordefault/

首先,Take是一种完全不同的方法。它返回一个IEnumerable< t>而不是一个T,所以这是无效的。

在First和FirstOrDefault之间,当您确定一个元素存在,如果它不存在,那么就会出现错误时,应该使用First。

顺便说一下,如果你的序列包含默认(T)元素(例如null),你需要区分空元素和第一个元素为空,你不能使用FirstOrDefault。

第()

返回序列的第一个元素。 当结果中没有元素或源为空时抛出错误。 如果需要多个元素,而你只需要第一个元素,你应该使用它。

FirstOrDefault ()

返回序列的第一个元素,如果没有找到元素,则返回默认值。 仅当源为空时才抛出错误。 如果需要多个元素,而你只需要第一个元素,你应该使用它。 如果结果为空也很好。

我们有一个UserInfos表,其中有如下所示的一些记录。根据下面的表格,我创建了一个例子…

如何使用First()

var result = dc.UserInfos.First(x => x.ID == 1);

只有一条记录ID== 1。应该返回这个记录 ID: 1姓:Manish姓:Dubey邮箱:xyz@xyz.com

var result = dc.UserInfos.First(x => x.FName == "Rahul");   

有多个FName == "Rahul"的记录。第一个记录应该返回。 ID: 7名:Rahul姓:Sharma邮箱:xyz1@xyz.com

var result = dc.UserInfos.First(x => x.ID ==13);

没有ID== 13的记录。应该会发生错误。 InvalidOperationException:序列不包含元素

如何使用FirstOrDefault()

var result = dc.UserInfos.FirstOrDefault(x => x.ID == 1);

只有一条记录ID== 1。应该返回这个记录 ID: 1姓:Manish姓:Dubey邮箱:xyz@xyz.com

var result = dc.UserInfos.FirstOrDefault(x => x.FName == "Rahul");

有多个FName == "Rahul"的记录。第一个记录应该返回。 ID: 7名:Rahul姓:Sharma邮箱:xyz1@xyz.com

var result = dc.UserInfos.FirstOrDefault(x => x.ID ==13);

没有ID== 13的记录。返回值为空

希望它能帮助你理解何时使用First()或FirstOrDefault()。