我刚刚使用LINQ to SQL创建了一个自定义角色提供程序来进行数据访问。您需要为提供程序编写的功能之一是从角色中删除用户;
public void RemoveUsersFromRoles(string[] usernames, string[] rolenames);
现在有一种方法;
这种方法远没有效率我想知道是否有更好的方法来处理LINQ to SQL中的这类问题。
有没有办法在LINQ to SQL中创建一个select语句,它将采用字符串数组进行比较,而不是循环并进行N次选择?任何比我上面描述的更好的方法都会非常感激。
参与的表格:
User (RecordID, Username)
Role (RecordID, Rolename)
UsersInRole (RoleID,UserID)
谢谢!
答案 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子句。