我对LINQ很陌生,我正在过滤一个SQL视图,该视图有一个名为'Readers'的列,该列包含由'#'分隔的多个组名(例如,Administrators#HR组#员工组“)。 有一个用户组的列表,我需要提取所有记录,其中读者至少包含一个用户组。换句话说,用户只能看到属于他的那些记录。创建一个比较数组的LINQ查询
我发现这个解决办法,但我认为这是极其低效:
private List<vwFax>getmyFaxes(List<string> myGroups)
{
var myFax = db.vwFax.AsQueryable();
var res = db.vwFax.AsQueryable();
List<vwFax> outRes= new List<vwFax>();
foreach (string elem in myGroups)
{
res = (from a in myFax
where a.Readers.Contains(elem)
select a);
if(res.Count() > 0)
{
outRes.AddRange(res);
}
}
return outRes.ToList();
}
任何帮助吗?
也许'(从在myFax其中a.Readers.Any(R => myGroups.Contains(R))选择一个).ToList()'' – haim770
db.vwFax.AsQueryable()式。 (x => myGroups.Any(y => x.Contains(y))。ToList();'你也可以创建一个存储过程而不是LINQ。 – Valentin
看起来问题出在'if(res.Count()> 0){outRes.AddRange(res);}'因为您正在执行SQL查询'myGroups.Count'时,而不是执行一个大查询。使用上面的LINQ查询,您只会执行一个查询。 – Valentin