c# - Linq 查询和多个仅具有 OR 第一个条件的 where 子句被评估

标签 c# linq

我通过提供用户名或用户 ID 为用户提供灵 active ,它们是不同的数据库字段,都是字符串。下面是我的 Linq 查询:

var usr = ctx.Users.Where(a => (a.Username.Equals(id) || a.UserID.Equals(id))).ToList();

问题是,如果我用用户名调用它:“johndoe”,我会得到一条记录,但是如果我使用 UserID:“12345”,那么即使有一个用户“johndoe”,我也不会得到任何记录数据库中的 ID“12345”。

另外,如果我将其更改为:

var usr = ctx.Users.Where(a => a.UserID.Equals(id)).ToList();

它与 UserID 一起工作得很好; “12345”。所以似乎只有第一个条件得到评估。无法弄清楚我做错了什么...

为了清楚起见:我想检查给定 id 值的两个字段,并返回任一字段与 id 匹配的记录。

我想要得到的最终结果是在我的 usr 变量中返回一条记录,而不管哪个字段、用户名或用户 ID 与输入 ID 匹配。

最佳答案

我觉得你的 linq 查询没问题

public class Users
    {
      public string Username {get;set;}
      public string Userid {get;set;}
    }

void Main()
{
    var users = new List<Users>{new Users {Username="johndoe",Userid="123"},
                                new Users {Username="stevejobs",Userid="456"}
                                };

    var filter = users.Where(a => (a.Username.Equals("123") || a.Userid.Equals("123"))).ToList();
    filter.Dump();
    var filter2 = users.Where(a => (a.Username.Equals("456") || a.Userid.Equals("456"))).ToList();
    filter2.Dump();
}

关于c# - Linq 查询和多个仅具有 OR 第一个条件的 where 子句被评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36775334/

相关文章:

c# - LINQ 的 Cast 方法表现出意外

c# - 尝试更改目标框架时从 Visual Studio 收到拒绝访问错误

c# - 如何在 .net 中导入 axaltocm dll [gemalto .net 卡]

c# - 在 MVVM 中解析 Prism 服务

c# - LINQ 根据引号将字符串拆分成句子

c# - 我的 GroupBy 查询有什么问题

c# - Linq 性能解析 XML 文件

c# - 如何修复错误 "Named Pipes Provider, error: 40 - Could not open a connection to SQL Server"

c# - 这种 SingleOrDefault() 优化是值得的还是过度/有害?

c# - LINQ 查询中的对象格式并返回空字符串