Если цель состоит в том, чтобы просто запрашивать списки с помощью LINQ, и вы хотите избежать таких перекомпиляций, не используйте SPMetal.LINQ можно напрямую использовать в SPListItemCollection, например,
var FindCustomer = from SPListItem Item in Customers.Items
where Item["Orders"] as int == 5
select Item;
// или выбрать новый {Title = Item ["Title"]}
Это не имеет жестко закодированных объектов, но является более гибким.И пока имена столбцов вашего списка остаются прежними, код можно развернуть в любой среде, даже если другие списки изменяются.Также вы можете выбрать получение нескольких данных выбранного поля вместо того, чтобы извлекать данные всех полей каждый раз.