Обратите внимание, что для одного столбца вы можете полностью избавиться от типа anon, и просто select f.P1
, но я оставлю это, поскольку он масштабируется до 2/3 / etc столбцов ...
Как насчет:
var query =
(from f in db.Foos
where f.Id == id
select new { f.P1 }).AsEnumerable()
.Select(row => new Foo { P1 = row.P1});
Главное разбить композицию; AsEnumerable()
делает это для нас.
Я также написал некоторый код для DbLinq, который изначально поддерживает этот тип конструкции - он может работать на LINQ-to-SQL; это где-то на usenet ...
Вы также можете использовать что-то вроде PropertyCopy()
( MiscUtil ), чтобы избежать необходимости отображать это самостоятельно:
var tmp = (from f in db.Foos
where f.Id == id
select new { f.P1 }).Single();
return PropertyCopy<Foo>.CopyFrom(tmp);