Я не эксперт Linq, но я думаю, что вы, вероятно, можете улучшить getEventId
(должно быть заглавной буквой), например,
public int? GetEventId(int inventoryGood)
{
var firstInventoryGoodsEvent = context.InventoryGoodsEvents
.Where(i => i.InventoryGood == inventoryGood)
.FirstOrDefault();
// ...etc
}
Использование FirstOrDefault()
означает, что вы не обработаете весь список, если найдете соответствующий элемент.
Возможно, есть и другие оптимизации, но довольно сложно следить за тем, что вы делаете. Как пример:
foreach (InventoryGoods i in list)
{
foreach (InventoryGoods e in goodsList)
{
}
}
i
и e
здесь не имеют большого значения. Для вас может быть очевидно, что они имеют в виду, но они не очень описательны для тех, кто никогда не видел ваш код раньше. Точно так же, list
не лучшее имя для списка. Список чего? Ваше имя переменной должно описывать ее назначение.
Edit:
Я не уверен ни в чем другом. Кажется, вы используете ToList()
в нескольких местах, где, насколько я вижу, это не нужно. Я не знаю, как это повлияет на производительность, но кто-то умнее меня, возможно, скажет вам.
Вы также можете попробовать поднять несколько ваших значений вне циклов, например:
foreach (foo)
{
foreach (bar)
{
DeletedOn = DateTime.Now;
DeletedBy = System.Web.HttpContext.Current.User.Identity.Name;
}
}
можно переписать как
var deletedOn = DateTime.Now;
var deletedBy = System.Web.HttpContext.Current.User.Identity.Name;
foreach (foo)
{
foreach (bar)
{
DeletedOn = deletedOn;
DeletedBy = deletedBy;
}
}
Опять же, я не уверен, какая разница, если таковая будет, вам нужно проверить это и посмотреть.