我对LINQ很新,我正在搜索过滤一个SQL视图,该视图有一个名为“Readers”的列,其中包含由'#'分隔的多个组名(例如“Administrators#HR Group#Employees Group”) 。 拥有用户组的列表,我需要提取读者包含至少一个用户组的所有记录。 换句话说,用户必须只看到属于他的那些记录。
我找到了这个解决方案,但我认为效率极低:
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();
}
请帮忙吗?
答案 0 :(得分:2)
基本上您在以下查询中说的是:对于myFax
中的每个项目,仅当item.Readers
包含Any
(至少1个)myGroups
中的项目时才接受它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;