c# - Linq/Enumerable Any Vs 包含

标签 c# linq enumerable

我已经解决了我遇到的一个问题,但虽然我已经发现了某些东西是如何工作的(或没有),但我不清楚为什么。

因为我是那种喜欢知道“为什么”的人,所以我希望有人能解释一下:

我有项目列表和相关评论,我想区分管理员评论和用户评论,所以我尝试了以下代码:

User commentUser = userRepository.GetUserById(comment.userId);
Role commentUserRole = context.Roles.Single(x=>x.Name == "admin");
if(commentUser.Roles.Contains(commentUserRole)
 {
   //do stuff
 }
else
{
 // do other stuff
}

单步执行代码显示虽然它有正确的 Role 对象,但它没有识别 commentUser.Roles 中的角色

最终运行的代码是:

if(commentUser.Roles.Any(x=>x.Name == "admin"))
{
  //do stuff
}

我对此很满意,因为它的代码更少,而且在我看来更清晰,但我不明白 contains 为什么不起作用。

希望有人能帮我解决这个问题。

最佳答案

可能是因为您没有覆盖相等比较(EqualsGetHashCodeoperator==) 在您的 Role 类中。因此,它在进行引用比较,这确实不是最好的主意,就好像它们不是同一个对象,它让它认为它是不同的。您需要重写那些相等运算符以提供值相等。

关于c# - Linq/Enumerable Any Vs 包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18058655/

相关文章:

ruby - 为什么 Enumerable#detect 需要 Proc/lambda?

ruby - 为什么 Enumerator 包含 Enumerable

ruby - 如何从 Ruby 可枚举列表中获取列表?

c# - 澄清暂时禁用提交按钮几秒钟,然后重新启用它?

c# - 将 EF 模型从 SSCE 4.0 切换到 SQL Server 2008 R2

c# - GetWeekOfYear 返回 2 而它应该为日期 02.01.2012 返回 1

c# - 列外的格式化字符串 "spilling"

c# - LINQ 查询无法评估 StartsWith 中的 GET 参数

linq - 使用 LINQ 将两个数组转换为一个新数组

c# - LINQ .Include() 来自 TPH 继承中子类型的属性