LINQ从List <t> </t>中选择Top 1

时间:2013-10-30 08:26:19

标签: c# linq lambda

我的代码如下

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

此代码将返回所有使用userID=5的用户并将其存储到我的列表中,如果所有用户都有5条记录UserId=5,它会将所有5条记录存储到UserDetail,怎么能我只存储记录的第一行而不是全部5,因为其他4只是来自AllUser的冗余

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:2)

您可以使用.First()

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

答案 2 :(得分: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#声明是一种陈述,而不是表达。