Linq查询和多个where子句与OR仅第一个条件得到评估

时间:2016-04-21 16:19:25

标签: c# linq

我通过提供用户名或用户ID来提供用户灵活性,这些用户名是不同的数据库字段,两个字符串。以下是我的Linq查询:

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

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

如果我将其更改为:

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

使用UserID可以正常工作; “12345”。所以似乎只评估了第一个条件。无法弄清楚我做错了什么......

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

我想得到的最终结果是在我的usr变量中返回一条记录,无论哪个字段,Username或UserID都与输入id匹配。

1 个答案:

答案 0 :(得分:-2)

您的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();
}