LINQ中怎么使用SQL语句IN进行操作

jvict2k 2009-03-12 04:57:08
比如数据库里有3表: User Role Group
ID User
1 小白
2 小红
3 小黑

Role
ID Role
1 增加
2 修改
3 删除

Group
UserId RoleId
1 1
1 2
2 1
要求显示所具有增加权限的所有用户
SELECT id,user FROM User WHERE id in (SELECT UserId FROM GROUP WHERE RoleId=1)

描述的不一定特别准确,但意思就是怎么使用SQL 语句中的IN操作,比如上面这个SQL语句如果用LINQ该怎么实现呢,在实际开发中(RoleId=变量)来代替。
...全文
1338 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qianchao2823 2009-05-20
  • 打赏
  • 举报
回复

int roleid=1;//动态数值
from urg in DB.UserRoleGroup from g in DB.Group where g.RoleId==roleid && urg.ID==g.UserId select urg;
qianchao2823 2009-05-20
  • 打赏
  • 举报
回复
int roleid=1;//动态数值
from urg in DB.UserRoleGroup from g in DB.Group where g.RoleId==roleid && urg.ID==g.UserId;
wangping_li 2009-03-20
  • 打赏
  • 举报
回复
var result=from u in User where id.Contains(from r in Group Where RoleID=1 select r.UserID)
select new { ID=u.id,user=u.user};
sbsb174 2009-03-18
  • 打赏
  • 举报
回复
var ids = from o in Group
join p in User on o.UserId euqals p.ID
join q in Role on o.RoleId equals q.ID
where q.role == "增加"
select new {userid = o.UserId, username = p.User};
hechenqingtian 2009-03-16
  • 打赏
  • 举报
回复
string[] customerID_Set = new string[] { "AROUT", "BOLID", "FISSA" };

var q = (from o in db.Orders
where customerID_Set.Contains(o.CustomerID)
select o).ToList();
  • 打赏
  • 举报
回复
哦,上面的伪代码中应该没有第一个any,第二个Any才是其意思,就是直接写:

FROM u in User
where GROUP.Where(g=>g.RoleId==1).Any(g=>g.UserId==u.id)
SELECT u
  • 打赏
  • 举报
回复
使用join,是在你有“优化意识”的时候。

如果没有查询优化意识,也完全可以使用linq的Any方式来写,类似于

FROM u in User
where u.id.Any(id=> GROUP.Where(g=>g.RoleId==1).Any(g=>g.UserId==id) )
SELECT u


in还是join的差别,其实这对于写SQL语句按说也是成立的。当你写成 select distinct.... from ... inner join .... 的时候,就比写成select .... from .... in ....要高效很多。只不过大型的数据库系统可以把SQL语句变化几十中方案来自动选择优化的一种,所以你写出很低效的in查询才没有出现多大的麻烦。

  • 打赏
  • 举报
回复
你这个什么in的,不就是inner join嘛!
jvhmr 2009-03-13
  • 打赏
  • 举报
回复
第一 , 你的系统这样的操作多不多,

如果很少,使用存储过程搞定,在linq to sql里调用即可.
yezie 2009-03-13
  • 打赏
  • 举报
回复
Contains
string[] customerID_Set =
new string[] { "AROUT", "BOLID", "FISSA" };
var q = (
from o in db.Orders
where customerID_Set.Contains(o.CustomerID)
select o).ToList();
wuyq11 2009-03-12
  • 打赏
  • 举报
回复
http://www.cnblogs.com/lyj/archive/2008/01/25/1052713.html

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧