Вопрос

Чтение вопросов здесь а также здесь дал мне некоторое представление о ситуации, и кажется, что использование Asenumerable - это употребление памяти. Есть ли лучший способ сделать этот LINQ и то, как он делается сейчас, надежны ли данные?

Удаление полученных результатов в «локальной последовательности не может использоваться в реализациях LINQ для 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 для объектов.

Увидеть мой Edulinq Post в блоге об этом Чтобы получить больше информации.

Теперь у вас действительно есть два вызовы в 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 отрывает запрос и сделает «внешнюю часть» в качестве Linq-to-объектов, а не LINQ-TO-SQL. По сути, вы используете «SELECT * FORM ...» как для ваших таблиц, а затем выполняете соединения, где фильтр предложения, заказ и проекция на стороне клиента.

Будьте осторожны при использовании AsEnumerable с структурой сущности; Если в вашей таблице есть много данных, ваш запрос может быть медленным, потому что запрос сначала загрузит данные, а затем примените where пункт, заказ и проекция.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top