创建一个LINQ查询比较数组
本文关键字:LINQ 查询 比较 数组 一个 创建 | 更新日期: 2023-09-27 18:00:10
我是LINQ的新手,我正在搜索一个SQL视图,该视图有一个名为"Readers"的列,其中包含几个用"#"分隔的组名(如"Administrators#HR group#Employees group")。有了用户组的列表,我需要提取Readers至少包含一个用户组的所有记录。换句话说,用户必须只看到属于他的那些记录。
我找到了这个解决方案,但我认为它效率极低:
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
中的每个项目,仅当该item.Readers
包含myGroups
中的Any
(至少1)个项目时,才使用它
outRes = db.myFax.Where(item => myGroups.Any(grp => item.Readers.Contains(grp)));
以及在查询语法中:
outRes = from item in db.myFax
where myGroups.Any(grp => item.Readers.Contains(grp))
select item;