Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建比较数组的LINQ查询_C#_Arrays_Performance_Linq - Fatal编程技术网

C# 创建比较数组的LINQ查询

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

我对LINQ非常陌生,我正在搜索一个SQL视图,该视图有一个名为“Readers”的列,其中包含几个由es分隔的组名。管理员HR组员工组。 有了一个用户组列表,我需要提取读卡器至少包含一个用户组的所有记录。 换句话说,用户必须只看到属于他的那些记录

我找到了这个解决方案,但我认为它效率极低:

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;