几条linq查询的优化,求助!~~

xiaoyan21 xiaoyan21 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
大家好,这是一个linq查询的代码,部分内容已封装。
public BaseOrder[] GetAllDocument(DateTime dtBegin, DateTime dtEnd)
{
QswmDataContext qdc = this.CreateDataContext();
var linq = from lx in qdc.GetTable<BaseOrder>()
where lx.editDate.Value.Date >= dtBegin.Date &&
lx.editDate.Value.Date <= dtEnd.Date
select lx;
  //根据权限过滤
var linq1 = linq.PowerFilter<BaseOrder>();
return linq1.ToArray();
}
//权限过滤的方法
public static IQueryable<T> PowerFilter<T>
(this IQueryable<T> source) where T : IShare
{
var users = GetShareUsers("权限分类"); //获取拥有权限的用户,类型为string[] length:大约有800;
var cur = Common.User.LoginName; // 当前用户
var salesUser = Common.SalesUser.LoginName; //当前业务员
var q= from c in source
where c.CreateUser == cur //createUser:创建人
|| c.SalesUser == salesUser //SalesUser:业务员
|| c.ShareUser.Contains(cur) //ShareUser:共享用户
|| users.Contains(c.salesUser) //其它有权限的用户
|| users.Contains(c.CreateUser)
select c;
return q;
}

程序是别人的程序,维护是我在做;
查询性能很低,发现在PowerFilter中花费大量的时间;
最后通过调试艰难的发现生成的sql会出现大量的 in(....),如:
select ... from BaseOrder
where CreateUser in ('u1','u2','u3'..... 'u800') or salesUser in ('u1','u2','u3'..... 'u800')  然**,我不太懂linq;

该如何优化呢? 谢谢帮助!
...全文
评论 6
收藏 已收藏
分享
返回顶部
xiaoyan21
C# 111,129 成员 642,540 内容