Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.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# AsEnumerable()对LINQ实体有什么影响?_C#_Linq_Entity_Enumerable - Fatal编程技术网

C# AsEnumerable()对LINQ实体有什么影响?

C# AsEnumerable()对LINQ实体有什么影响?,c#,linq,entity,enumerable,C#,Linq,Entity,Enumerable,通过阅读这些问题,我对目前的情况有了一些了解,似乎使用AsEnumerable是一种消耗内存的方法。有没有更好的方法来实现这一点LINQ和现在的做法,得出的数据可靠吗 除了Contains运算符外,在查询运算符的LINQ到SQL实现中不能使用删除“本地序列”中的AsEnumerable结果 使用AsEnumerable将中断查询,并将“外部部分”作为linq to对象而不是linq to SQL来执行。实际上,您正在为两个表运行“select*from…”,然后在客户端执行连接、where子句筛

通过阅读这些问题,我对目前的情况有了一些了解,似乎使用AsEnumerable是一种消耗内存的方法。有没有更好的方法来实现这一点LINQ和现在的做法,得出的数据可靠吗

除了Contains运算符外,在查询运算符的LINQ到SQL实现中不能使用删除“本地序列”中的AsEnumerable结果


使用AsEnumerable将中断查询,并将“外部部分”作为linq to对象而不是linq to SQL来执行。实际上,您正在为两个表运行“select*from…”,然后在客户端执行连接、where子句筛选、排序和投影。

AsEnumerable()
实际上是对
IEnumerable
的转换,这使得成员解析查找
可枚举的
成员,而不是
可查询的
。当您希望强制查询的一部分以SQL(或类似的方式)运行,而其余部分使用LINQ to对象运行时,通常会使用它

有关更多信息,请参阅我的

现在您实际上有两个对
AsEnumerable
的调用。我知道删除第一个而不是第二个会导致问题,但是您是否尝试过同时删除这两个

var results = from p in pollcards
              join s in spoils
                 on new { Ocr = p.OCR, fileName = p.PrintFilename } 
                 equals new { Ocr = s.seq, fileName = s.inputFileName }
              where p.Version == null
              orderby s.fileOrdering, s.seq
              select new ReportSpoilsEntity
              {
                  seq = s.seq,
                  fileOrdering = s.fileOrdering,
                  inputFileName = s.inputFileName,
                  Ocr = p.OCR,
                  ElectorName = p.ElectorName
              };

在实体框架中使用
AsEnumerable
时要小心;如果您的表有大量数据,您的查询可能会很慢,因为查询将首先加载数据,然后应用
where
子句、排序和投影

我遇到的错误是在删除两个asenumerable时出现的。(我没有尝试只删除一个)。战利品和波尔卡本身就是LINQ声明,这有关系吗?(一个IQueryable和一个Collection)@Andy:是的,
破坏
是一个内存中的集合,这一点绝对相关。我假设这是另一个DB查询。我不知道有什么办法能把数据库里的数据一分为二。
战利品
最初是否来自数据库?战利品是通过两个查询创建的,一个用于前10名,一个用于前10名,对结果进行并集,然后填充集合以通过该并集进行搜索。我不知道为什么我们不返回union并将其从Iqueryable转换为集合。(返回IQueryable可以解决对asEnumerable的需求吗?@Andy:将工会作为一个
IQueryable
可以解决这个问题。。。试一试:)无可否认,生成的SQL可能非常难看,但它可以做您想要的事情。
var results = from p in pollcards
              join s in spoils
                 on new { Ocr = p.OCR, fileName = p.PrintFilename } 
                 equals new { Ocr = s.seq, fileName = s.inputFileName }
              where p.Version == null
              orderby s.fileOrdering, s.seq
              select new ReportSpoilsEntity
              {
                  seq = s.seq,
                  fileOrdering = s.fileOrdering,
                  inputFileName = s.inputFileName,
                  Ocr = p.OCR,
                  ElectorName = p.ElectorName
              };