创建比较数组的LINQ查询

时间:2016-08-03 11:01:23

标签: c# arrays performance linq

我对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();
}

请帮忙吗?

1 个答案:

答案 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;