LINQ从List<T>中选择Top 1

5

我的代码如下:

List<User> UserDetails = AllUser.Where(x => x.UserId == 5).ToList(); 

此代码将返回所有用户,其中userID=5并将其存储到我的列表中。如果所有用户都有5条记录与UserId=5匹配,则它将把所有5条记录存储到UserDetail中。如何只存储记录的第一行而不是所有5行,因为其他4行仅是AllUser的冗余。
3个回答

10
User UserDetails = AllUser.FirstOrDefault(x => x.UserId == 5); 

3

你可以使用 .First()

User UserDetails = AllUser.First(x => x.UserId == 5);

5
如果没有找到用户,First() 方法可能会抛出异常。我认为 FirstOrDefault() 方法更好。 - Tu Tran

0

有四个答案基本上说了同样的事情,这似乎有点傻,但这取决于如果没有对象满足您的条件,您想要发生什么。它应该引发异常吗?还是应该静默继续执行?

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# 中,声明是语句而不是表达式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接