2011-12-22 98 views
4

有人可以帮我解决这个问题吗?我想要一个简单的'在哪里'。这就是我想要的SQL。LINQ to SQL在哪里(lambda语法)

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

这是我的尝试。 .IN()方法显然不存在,只是把我的强烈想法大声笑。

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

这出现了很多。我觉得.NET团队应该为'In()'创建一个对应于'Contains()'的扩展方法别名。 – Yuck 2011-12-22 19:13:01

回答

8

至于你提到In不存在,本身.Contains(),而不是如果你有一个清单,你的情况你也可以使用x.RoleId == 5 || x.RoleId == 15

例如

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

然后在where条款做:

allowedRoles.Contains(x.RoleID) 
+0

值得一提的是,ADO.NET实体框架不支持.Contains - 但是有一个解决方案在网络上浮动以实现自定义的扩展方法,可以让您继续使用linq实体。 – 2011-12-22 19:44:40

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

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

HTH

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。

+0

你为什么要在开始而不是结束时先放? – Kukoy 2011-12-22 19:25:28

+0

你不能在第一个() – Kukoy 2011-12-22 19:31:44

+0

oops上做select()。按错误的顺序输入。抱歉。当你不注意时,会发生这种情况。固定。 – 2011-12-22 20:01:53