Я хотел сделать обновление по потенциально миллионным записям. Я люблю Linq, и я написал это ниже, чтобы попытаться выполнить это. Я действительно надеюсь, что написал это ужасно неправильно. Потрачено время и часы. Я написал его в T-sql, и он заработал минут. Есть ли лучший способ сделать это с помощью linq?Экстремальная медленность с Linq при массовом обновлении
private static void UpdateZipCodes()
{
Console.WriteLine("Update Zip Codes Started");
DataDataContext _db = new DataDataContext();
var newBadZips = (from n in _db.NewCars
where n.loczip == null || n.loczip == ""
select n).ToList();
foreach (var bad in newBadZips)
{
string lZip = _db.Dealers.Where(x => x.DealerID == bad.DealerID).Select(x => x.Zipcode).SingleOrDefault();
bad.loczip = lZip;
_db.SubmitChanges();
}
Console.WriteLine("Update Zip Codes Finshed");
}
T-Sql версия
UPDATE n
SET n.loczip = d.Zipcode
FROM NewCars AS n INNER JOIN
Dealers AS d ON n.DealerID = d.DealerID
where n.loczip is null or n.loczip = ''
Я понимаю, что очевидно из этого LINQ делает больше. Я хочу знать, как мой linq-запрос может быть улучшен?
Я не пытаюсь сравнивать их в том смысле, что знаю, что T-sql - это правильный способ выполнить это. Это в основном для меня становится лучше при использовании linq. Я уверен, что когда-нибудь захочу сделать что-то подобное в меньшем масштабе и хочу сделать это правильно в linq.
Что вы подразумеваете под «использованием удалений»? –
@zespri Спасибо, что поймали этот плохой титул. – jackncoke
Я мог ошибаться, но возможно потому, что вы делаете 3 разных действия в коде против версии T-SQL. Вы запрашиваете базу данных и сохраняете список, затем выполняете итерацию по списку, а затем обновляете базу данных из этого списка. С миллионами записей это займет довольно много времени. – MyCodeSucks