Да, есть способ попроще. Намного проще. Если вы прикрепите свои сущности к контексту, а затем обновите (с выбранным KeepCurrentValues), Linq to SQL получит эти сущности с сервера, сравнит их и пометит как обновленные те, которые отличаются. Ваш код будет выглядеть примерно так.
public static void Update(IEnumerable<Sample> samples
, DataClassesDataContext db)
{
db.Samples.AttachAll(samples);
db.Refresh(RefreshMode.KeepCurrentValues, samples)
db.SubmitChanges();
}
В этом случае Linq to SQL использует ключи для сопоставления и обновления записей, так что пока ваши ключи синхронизированы, все в порядке.
С Linq2Sql (или Linq to Entities) нет возможности * обновить записи на сервере, не получив их сначала полностью, так что то, что вы делаете, действительно правильно.
Если вы хотите избежать этого, напишите хранимую процедуру, которая делает то, что вы хотите, и добавьте ее в вашу модель.
Я не совсем уверен, что это был ваш предполагаемый вопрос:)
*: Есть несколько хаков вокруг этого используйте LINQ для создания оператора SELECT и каким-то образом преобразовать полученный оператор SELECT в UPDATE, но я бы не рекомендовал это.