Это будет работать:
var trips = from t in ctx.Trips select new Trip
{
// db properties
t.ID,
t.Name,
t.Description,
// non-db properties
SomeValue = 45,
SomeOtherValue = GetValueFromSomewhereInCode(t.ID)
}
Проецируя строки базы данных в «новые» объекты Trip, вы можете установить свойства, которые не заполняются LINQ to SQL, без необходимости в дополнительном перечислении. Вы также можете вызывать пользовательский код в своей проекции, потому что он выполняется в коде, а не как часть оператора SQL, отправляемого в базу данных.
Однако полученные объекты Trip не включены для отслеживания изменений, поэтому имейте это в виду (вы не можете вносить изменения в свойства и автоматически обновлять их с помощью SubmitChanges()
, поскольку контекст данных не знает о Trip
объектов).
Если вам также необходимо отслеживать изменения, вам нужно будет снова перечислить отслеживаемые объекты Trip после того, как вы получили их через LINQ to SQL. На самом деле это не проблема, так как это должна быть итерация в памяти.