急急急-高分!!!!LInq表达式连接 改成SQL语句或存储过程方式;

wang_maosen 2016-07-29 03:58:19
/// <summary>
/// 20150127增加了重载:用于解决表达式查询超时问题
/// </summary>
/// <param name="userId"></param>
/// <param name="sikp"></param>
/// <param name="take"></param>
/// <param name="ProcessCategories"></param>
/// <param name="creatorName"></param>
/// <param name="q_appId"></param>
/// <param name="count"></param>
/// <returns></returns>
public IEnumerable<FlowTaskExt> GetTaskByUserIdNew(
int userId,
int sikp,
int take,
int ProcessCategories,
string creatorName,
string q_appId,
out int count)
{

using (var ctx = CreateContext())
{
var qr = from r in ctx.Set<UserRole>()
where r.UserId == userId
select r.RoleId;


var qd = from d in ctx.Set<Delegation>()
where d.DelegateEmpId == userId && d.StartDate <= DateTime.Now && d.EndDate >= DateTime.Now && d.IsActive == 1
select d.EmpId;

//根据当前登录人查找被代理人的roleid(角色)
var qdr = from d in ctx.Set<Delegation>()
join ur in ctx.Set<UserRole>() on d.EmpId equals ur.UserId
where d.DelegateEmpId == userId && d.StartDate <= DateTime.Now && d.EndDate >= DateTime.Now && d.IsActive == 1
select ur.RoleId;

IQueryable<FlowTaskExt> q;

q = from ft in ctx.Set<FlowTask>()
join app in ctx.Set<Application>() on ft.ApplicationId equals app.Id
join u1 in ctx.Set<USER>() on ft.AssignedId equals u1.Id
into temp1
from app_u1 in temp1.DefaultIfEmpty()
join u2 in ctx.Set<USER>() on app.CreateEmpId equals u2.Id
where (
(ProcessCategories == 0 || app.ProcessCategoryId == ProcessCategories)
//&&
//(string.IsNullOrEmpty(creatorName) || u2.ChineseName.Contains(creatorName))
//&& (string.IsNullOrEmpty(q_appId) || app.AppNumber.Contains(q_appId))
)
&&
(ft.OperatorId == null || ft.OperatorId.Value == 0)
&& (
(app.Node == ft.Node && (ft.AssignedId == userId || qr.Contains(ft.AssignedId.Value) || qd.Contains(ft.AssignedId.Value) || qdr.Contains(ft.AssignedId.Value))

|| (app.Node == Common_ApplicationNode.Node_AskForMore && app.CreateEmpId == userId))
)


orderby ft.Id
select new FlowTaskExt
{
Id = ft.Id,
ApplicationId = ft.ApplicationId,
InstanceId = ft.InstanceId,
workFlowProcessId = ft.workFlowProcessId,
Node = app.Node,
AssignedId = ft.AssignedId,
workFlowStartTime = ft.workFlowStartTime,
OperatorId = ft.OperatorId,
AssosiateApplication = app,
AssignedName = ft.AssignedId < 0 ? "Role" : app_u1.ChineseName,
SubmitterName = u2.ChineseName

};

count = q.ToArray().Length;
q = q.OrderByDescending(t => t.AssosiateApplication.CreateTime).Skip(sikp).Take(take);
return q.ToArray();
}
}
...全文
1263 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
有问又问 2016-08-25
  • 打赏
  • 举报
回复
我可以理解为这是因为懒嘛
q107770540 2016-07-30
  • 打赏
  • 举报
回复
看着就是一个根据条件查询 然后对结果进行分页的方法而已

8,497

社区成员

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

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