Каково влияние Asenumerable () на объект LINQ?
-
24-10-2019 - |
Вопрос
Чтение вопросов здесь а также здесь дал мне некоторое представление о ситуации, и кажется, что использование 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
пункт, заказ и проекция.