Rei*_*aka 3 linq linq-to-entities
说我有这个视图模型:
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; }
}
Run Code Online (Sandbox Code Playgroud)
为方便起见,我将投影功能放在那里,所以现在我可以说:
var links = dc.Series.Select(SeriesLinkViewModel.FromSeries);
Run Code Online (Sandbox Code Playgroud)
真棒.但是,如果我想添加到此查询,该怎么办?说我也想Description从表中拉出一列.通常,我可以做一个select new { }并放在Description那里,但我不能那样做因为我只能在`.Select()中放一个投影函数.
我希望我能做到这样的事情:
q = from s in dc.Series
select new
{
Series = SeriesLinkViewModel.FromSeries.Compile()(s),
Description = s.Description
};
Run Code Online (Sandbox Code Playgroud)
但我得到一个例外:
System.InvalidCastException:无法将类型为"System.Linq.Expressions.FieldExpression"的对象强制转换为"System.Linq.Expressions.LambdaExpression".
或者我可以至少在一次往返中完成所有这些查询吗?我知道TransactionScope可以进行更改,但我认为它不会导致查询一次完成.
var fs = SeriesLinkViewModel.FromSeries; //needs to be local for some reason
q = from s in dc.Series.AsExpandable() //enables LinqKit to do its magic
select new
{
Series = fs.Invoke(s), //and voila!
Description = s.Description
};
Run Code Online (Sandbox Code Playgroud)