Я думаю, что у меня сегодня своя голова: У меня есть IEnumerable типа POCO, содержащего около 80 000 строк и таблицу db (L2E/EF4), содержащую подмножество строк, где была «ошибка/разность "(около 5000 строк, но часто повторяются, чтобы дать около 150 различных записей * сильного текста *)Обновить объект в IEnumerable <> не обновлять?
Следующего код получает отчетливое VSACode в„ошибочном“, а затем пытается обновить полный набор результатов, обновление только строки, которые соответствуют ... но это не работает!
Какая глупость я сделал ?!
var vsaCodes = (from g in db.GLDIFFLs
select g.VSACode)
.Distinct();
foreach (var code in vsaCodes)
{
var hasDifference = results.Where(r => r.VSACode == code);
foreach (var diff in hasDifference)
diff.Difference = true;
}
var i = results.Count(r => r.Difference == true);
После этого кода, я = 0
Я также попытался:
foreach (var code in vsaCodes)
{
results.Where(r => r.VSACode == code).Select(r => { r.Difference = true; return r; }).ToList();
}
Как я могу обновить "результаты", чтобы установить только свойство соответствия разница?
Мое понимание (явно не совсем правильное) заключалось в том, чтобы избежать использования ToList(), если вы действительно не нуждаетесь в этом ... Я думаю, что это ситуация «действительно нужна»? Быстрый Q? лучше ли называть ToList() на ранней стадии моей цепочкой высказываний/запросов для материализации списка? Если я этого не сделаю, будет ли он запрашивать DB каждый раз, когда он будет использоваться? – BlueChippy
@BlueChippy: Обычно вы должны использовать ToList как можно дольше, так что большая часть запроса (в частности, части, которые фильтруют вывод) выполняется в базе данных. –
Спасибо, Jon, думаю, я оставил этот ToList() немного TooLate();) – BlueChippy