Скажем, у меня есть эта модель вида:
public class SeriesLinkViewModel
{
public static Expression<Func<Series, SeriesLinkViewModel>> FromSeries =
s => new SeriesLinkViewModel
{
Name = s.Name,
Slug = s.Slug,
};
public string Name { get; set; }
public string Slug { get; set; }
}
Я вставил туда функцию проекции для удобства, так что теперь я могу сказать что-то вроде:
var links = dc.Series.Select(SeriesLinkViewModel.FromSeries);
Удивительно.Но что мне делать, если я хочу добавить к этому запросу?Скажем, я также хотел вытащить столбец Description
из таблицы.Обычно я мог бы просто сделать select new { }
и поместить туда Description
, но я не могу этого сделать, потому что я могу поместить только одну проекционную функцию в `.Select ().
Я надеялсяЯ мог бы сделать что-то вроде этого:
q = from s in dc.Series
select new
{
Series = SeriesLinkViewModel.FromSeries.Compile()(s),
Description = s.Description
};
Но я получил исключение:
System.InvalidCastException: Невозможно привести объект типа 'System.Linq.Expressions.FieldExpression'набрать 'System.Linq.Expressions.LambdaExpression'.
Или я мог бы хотя бы как-то выполнить все эти запросы за один раз?Я знаю, что TransactionScope работает для внесения изменений, но я не думаю, что это приводит к тому, что запросы выполняются сразу.