C# 创建比较数组的LINQ查询
我对LINQ非常陌生,我正在搜索一个SQL视图,该视图有一个名为“Readers”的列,其中包含几个由es分隔的组名。管理员HR组员工组。 有了一个用户组列表,我需要提取读卡器至少包含一个用户组的所有记录。 换句话说,用户必须只看到属于他的那些记录 我找到了这个解决方案,但我认为它效率极低:C# 创建比较数组的LINQ查询,c#,arrays,performance,linq,C#,Arrays,Performance,Linq,我对LINQ非常陌生,我正在搜索一个SQL视图,该视图有一个名为“Readers”的列,其中包含几个由es分隔的组名。管理员HR组员工组。 有了一个用户组列表,我需要提取读卡器至少包含一个用户组的所有记录。 换句话说,用户必须只看到属于他的那些记录 我找到了这个解决方案,但我认为它效率极低: private List<vwFax>getmyFaxes(List<string> myGroups) { var myFax = db.vwFax.AsQueryable
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中的每个项目,仅当该项目存在时才使用。读者至少包含MyGroup中的一个项目 在查询语法中:
outRes = from item in db.myFax
where myGroups.Any(grp => item.Readers.Contains(grp))
select item;
可能来自myFax中的,其中a.Readers.Anyr=>myGroups.Containsr选择a.ToListdb.vwFax.AsQueryable.Wherex=>myGroups.Anyy=>x.Containsy.ToList;您还可以创建一个存储过程而不是LINQ。看起来问题在于ifres.Count>0{outRes.AddRangeres;},因为您正在执行SQL查询myGroups.Count time,而不是执行一个大查询。使用上面的LINQ查询,您将只执行一个查询。
outRes = from item in db.myFax
where myGroups.Any(grp => item.Readers.Contains(grp))
select item;