我的代码如下:
List<User> UserDetails = AllUser.Where(x => x.UserId == 5).ToList();
此代码将返回所有用户,其中
userID=5
并将其存储到我的列表中。如果所有用户都有5条记录与UserId=5
匹配,则它将把所有5条记录存储到UserDetail
中。如何只存储记录的第一行而不是所有5行,因为其他4行仅是AllUser
的冗余。User UserDetails = AllUser.FirstOrDefault(x => x.UserId == 5);
有四个答案基本上说了同样的事情,这似乎有点傻,但这取决于如果没有对象满足您的条件,您想要发生什么。它应该引发异常吗?还是应该静默继续执行?
public bool IsCorrectUser(User u) { return u.UserId == 5; }
// An exception should be raised when there are no matches
var firstHit = AllUser.First(IsCorrectUser);
// When it is okey not to have a match
User firstHit;
if ((firstHit = AllUser.FirstOrDefault(IsCorrectUser) != null)
{
// Use the firstHit variable
}
顺便说一下,出于可读性考虑,我喜欢将FirstOrDefault放入 if
语句中,这样我就确信此if语句与集合中某个特定值或值的存在密切相关。
遗憾的是,在 C#
中,声明是语句而不是表达式。
First()
方法可能会抛出异常。我认为FirstOrDefault()
方法更好。 - Tu Tran