我到处搜索,并没有真正找到一个明确的答案,什么时候你想使用. 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 / Firstordefault用于使用第二个构造函数。我不会解释它是什么,但它是指你可能总是使用一个,因为你不想引起异常。

person = tmp.FirstOrDefault(new Func<Person, bool>((p) =>
{
    return string.IsNullOrEmpty(p.Relationship);
}));

其他回答

当我知道或期望序列至少有一个元素时,我会使用First()。换句话说,当出现异常时,序列为空。

当您知道需要检查是否存在元素时,请使用FirstOrDefault()。换句话说,当序列为空是合法的时候。您不应该依赖异常处理进行检查。(这是不好的做法,可能会影响性能)。

最后,First()和Take(1)之间的区别是First()返回元素本身,而Take(1)返回只包含一个元素的元素序列。

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

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

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

Linq有很多方法来实现对集合的简单查询,只要我们在sql中写入连接,过滤器可以根据需要或必要性先应用或最后应用。

下面是一个示例,我们可以在集合中找到带有id的元素。 为了进一步说明这一点,当一个集合至少有一条记录时,方法First和FirstOrDefault理想情况下会返回same。但是,如果集合可以为空的话。那么First将返回一个异常,而FirstOrDefault将返回null或默认值。例如,int将返回0。因此,虽然说使用such是个人偏好,但最好使用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()。

如果没有要返回的行,. first()将抛出异常,而. firstordefault()将返回默认值(所有引用类型为NULL)。

因此,如果你准备好并愿意处理一个可能的异常,. first()是很好的。如果您更喜欢检查!= null的返回值,那么. firstordefault()是更好的选择。

但我想这也有点个人偏好。使用哪个对你更有意义,更适合你的编码风格。