C# LINQ到SQL,其中位于(lambda语法)

C# LINQ到SQL,其中位于(lambda语法),c#,linq,lambda,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 =

有人能帮我吗?我想要一个简单的“在哪里”。这是我想要的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();
    }
}

正如您在中提到的
不存在,如果您有一个列表,您也可以使用
x.RoleId==5 | | x.RoleId==15

e、 g

然后在
where
子句中执行以下操作:

allowedRoles.Contains(x.RoleID)
var setNumbers=newlist(){5,15};
communityContext.UserRoles.Where(x=>x.UserID==r.ClientId)
.Where(x=>setNumbers.Contains(x.RoleID))
...

我会把它改写成

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。

这经常出现。我觉得.NET团队应该为
In()
创建一个扩展方法别名,该别名对应于
Contains()
。为什么要在开头而不是结尾放在第一位?不能在第一位()上执行select()。打错了顺序。很抱歉这就是当你不注意的时候发生的事情。修正了。值得一提的是,ADO.NET实体框架不支持.Contains,但对于自定义扩展方法,有一个解决方案在网上浮动,该方法允许您仍然使用linq to Entity进行扩展。
var setNumbers = new List<int>() { 5, 15};

communityContext.UserRoles.Where(x => x.UserID == r.ClientId)
                          .Where(x => setNumbers.Contains( x.RoleID ) )
                          ...
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;            
    }
}