当我需要选择第一项时,Where(lambda expr。)和First(lambda expr。)之间的区别是什么?

时间:2010-12-08 15:29:57

标签: linq-to-sql

我想知道这两种语法之间的区别:

return db.Contacts.First(x => x.ContactID == id)

到目前为止,我一直在使用,直到我收到错误“序列不包含元素”。然后我必须再次使用下面的那个。

return db.Contacts.Where(x => x.ContactID == id).First();

必须有一个细微差别,我没有做对。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

First用于获取序列的第一个元素,但它也使用谓词来过滤IEnumerable序列。

因此,First将返回IEnumerable的第一个元素,其中包含一个或多个结果。

First(Predicate)将在IEnumerable中返回结果的第一个元素,结果为1或更多。

如果使用First时有0个元素,您将收到错误序列不包含元素。如果您希望结果为0,则应使用FirstOrDefaultFirstOrDefault也可以使用谓词,即

// Will return null if there are no elements with a matching contact Id
return db.Contacts.FirstOrDefault(x => x.ContactID == id);