LINQ to SQL多对多比较查询

时间:2009-08-05 15:48:54

标签: algorithm linq-to-sql asp.net-membership

我刚刚使用LINQ to SQL创建了一个自定义角色提供程序来进行数据访问。您需要为提供程序编写的功能之一是从角色中删除用户;

public void RemoveUsersFromRoles(string[] usernames, string[] rolenames);

现在有一种方法;

  1. 返回角色列表
  2. 为每个角色进行迭代,并从具有该角色的所有用户中删除该角色
  3. 这种方法远没有效率我想知道是否有更好的方法来处理LINQ to SQL中的这类问题。

    有没有办法在LINQ to SQL中创建一个select语句,它将采用字符串数组进行比较,而不是循环并进行N次选择?任何比我上面描述的更好的方法都会非常感激。

    参与的表格:

    User (RecordID, Username)
    Role (RecordID, Rolename)
    UsersInRole (RoleID,UserID)
    

    谢谢!

1 个答案:

答案 0 :(得分:4)

这应该有效:

var uirQuery = from uir in db.UsersInRole
               join u in db.User on uir.UserID equals u.RecordID
               join r in db.Role on uir.RoleID equals r.RecordID
               where usernames.Contains(u.Username) 
                  && rolenames.Contains(r.Rolename)
               select uir;

db.UsersInRole.DeleteAllOnSubmit(uirQuery);

LINQ to SQL将“Contains”表达式转换为T-SQL IN子句。