Foreach в foreach можно переписать так:
var itsReallyJustAJoin = (from g in GoodEvent
join i in InventoryEvent on g.Gid equals i.Gid
select new {g.Id, good.Id}).ToList();
Затем вы можете вставить их так, как захотите.Похоже, вы делаете партии по 50 прямо сейчас?Вы можете продолжить это, если хотите ... Это заберет всю работу за пределы области транзакции, так что вы, вероятно, сможете сразу же пролистать весь бит, если ваши результаты не слишком велики.