Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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时出现Stackoverflow异常_C#_Asp.net_Linq_Console_Stack Overflow - Fatal编程技术网

C# 使用Linq时出现Stackoverflow异常

C# 使用Linq时出现Stackoverflow异常,c#,asp.net,linq,console,stack-overflow,C#,Asp.net,Linq,Console,Stack Overflow,我在使用下面的linq语句时遇到堆栈溢出异常 var dbUsers=context.users.Where(ad=>userIDList.Any(up=>up==ad.UserID)).ToList() 用户使用实体框架从数据库中获取用户列表。 userIDList是字符串格式的userid列表。 我试图从数据库中获取与列表userIDList中的用户ID相同的所有用户,以便对这些用户进行更改。 列表很大(23k)。这可能是问题所在吗 列表很大(23k)。这可能是问题所在吗 这绝对是一个问题。

我在使用下面的linq语句时遇到堆栈溢出异常

var dbUsers=context.users.Where(ad=>userIDList.Any(up=>up==ad.UserID)).ToList()

用户使用实体框架从数据库中获取用户列表。 userIDList是字符串格式的userid列表。 我试图从数据库中获取与列表userIDList中的用户ID相同的所有用户,以便对这些用户进行更改。 列表很大(23k)。这可能是问题所在吗

列表很大(23k)。这可能是问题所在吗

这绝对是一个问题。SQL不支持如此大的查询,更糟糕的是,EF试图为如此大的列表创建谓词,但失败了。 此外,还应简化此查询

var dbUsers = context.users
   .Where(ad => userIDList.Contains(ad.UserID)).ToList();
但我不认为这会有什么帮助,在这种情况下,只有临时桌子能帮上忙

因为我不知道其他的解决方案,所以在这里留下使用扩展的示例(免责声明我是这个扩展的作者),当所有其他解决方案都失败时,您可以返回

class IdHolder
{
   [Column] public int Id;
}

...

var ids = userIDList.Select(id => new IdHolder { Id = id });

using (var l2db = context.CreateLinqToDBConnection())
using (var temp = l2db.CreateTemporaryTable("#UserIds", ids))
{
    var query = 
      from t in temp
      join u in context.users on t.Id equals u.UserId
      select u;

   var dbUsers = query.ToList();
}

是的,大量的记录是问题所在。通过将列表分解成更小的块,我能够使它工作。