阅读herehere问题使我对情况有了一些了解,似乎使用AsEnumerable会消耗内存。有没有更好的方法来执行此LINQ,现在是否已完成,输出的数据是否可靠?

删除AsEnumerable结果为“除包含包含运算符外,不能在查询运算符的LINQ to SQL实现中使用本地序列”。

var results = from p in pollcards.AsEnumerable()
                          join s in spoils.AsEnumerable() 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()实际上是对IEnumerable<T>的转换,这使成员解析可以找到Enumerable的成员而不是Queryable。它通常在您要强制查询的一部分以SQL(或类似形式)运行,而其余部分使用LINQ to Objects来运行时使用。

有关更多信息,请参见我的Edulinq blog post on it

现在,您实际上有两次调用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
              };

10-08 20:12