LINQ to SQL where in(lambda syntax)

时间:2011-12-22 19:05:17

标签: c# linq lambda

有人可以帮帮我吗?我想要一个简单的“在哪里”。这是执行我想要的SQL。

select ur.RoleID
from UserRoles ur
where ur.RoleID in (5, 15)

这是我的尝试。方法.IN()显然不存在,只是把我的凝聚思想lol。

int roleid;
foreach (data r in dataList) {
    using (DataContext communityContext = new DataContext()) {
        roleid = communityContext.UserRoles
            .Where(x => x.UserID == r.ClientId && x.RoleID.IN(5, 15))
            .Select(x => x.RoleID)
            .First();
    }
}

3 个答案:

答案 0 :(得分:8)

如你所说In不存在,如果你有一个列表,请改为.Contains(),在你的情况下,你也可以使用x.RoleId == 5 || x.RoleId == 15

e.g。

var allowedRoles = new int[] { 5, 15 };

然后在你的where子句中执行:

allowedRoles.Contains(x.RoleID)

答案 1 :(得分:1)

var setNumbers = new List<int>() { 5, 15};

communityContext.UserRoles.Where(x => x.UserID == r.ClientId)
                          .Where(x => setNumbers.Contains( x.RoleID ) )
                          ...

HTH

答案 2 :(得分:0)

我会把它重写为......

int roleid;
var allowedRoles = new[] {5, 15};
foreach (data r in dataList) {
    using (DataContext communityContext = new DataContext()) {
        roleid = communityContext.UserRoles
            .First(x=> x.UserID == r.ClientId && allowedRoles.Contains(x.RoleID))
            .RoleID;            
    }
}

另外,我不确定你为什么要在循环中创建datacontext。这看起来很浪费,因为datacontext不依赖于datalist。