我有3张桌子 用户, 角色, 系
用户表具有Id,Name,IsDisable,Role_Id,Department_Id
角色表具有Id,Name,IsDisable
部门表有Id,Name,IsDisable
我将根据请求加入表格,仅在请求中我将知道我应该加入哪个表格。所以我正在加入表动态并获取价值。 但现在我必须搜索自由文本。现在我必须在连接表“名称”列中找到包含一些文本的列,例如:('%G%')。如何实现?
IQueryable<User> query= _odb.User.Where(a=>!a.IsDisable);
if(request.RoleNeeded)
{
query=from qu in query
join ro in _odb.Role on us.Role_Id equals Role.Id
select qu
}
if(request.DepartmentNeeded)
{
query=from qu in query
join de in _odb.Department on us.Department_Id equals Department.Id
select qu
}
如何使用'或'条件动态做'喜欢'的Where条件?
答案 0 :(得分:0)
尝试代码
在Linq查询和Inside To Where案例中添加左连接。
PendingIntent.getBroadcast()
答案 1 :(得分:0)
如果这可能最终会转到SQL(Linq2SQL,EF等),那么它可以通过一些有意识的选择性代码来最小化潜在的SQL。这需要设置映射,以便数据对象之间的关系是众所周知。 (假设EF或Linq2SQL)
var matchingUsers = _odb.User.Where(u=> false == u.IsDisable && u.Name.Contains("G"));
var matchingRoles = _odb.User.Where(u=> false == u.IsDisable && u.Roles.Any(r=> r.Name.Contains("G"));
var matchingDepartments = _odb.User.Where(u=> false == u.IsDisable && u.Departments.Any(r=> r.Name.Contains("G"));
// The above queries will not have executed yet until we call a ToList, FirstOrDefault, etc.
// Set up which results we are interested in by unioning based on the request.
var query = matchingUsers;
if (request.RoleNeeded)
query = query.Union(matchingRoles);
if (request.DepartmentNeeded)
query = query.Union(matchingDepartments);
//Executes and returns our requested matches.
return query.ToList();
应该可以替代地计算单个where子句,但最终会涉及将null条件发送到DB,从而导致更复杂的执行计划。