gpt4 book ai didi

linq - 如何在 Linq 中组合多个重构的 Select 表达式(到 EF 或 SQL)?

转载 作者:行者123 更新时间:2023-12-02 10:52:12 26 4
gpt4 key购买 nike

假设我有这个 View 模型:

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 放入其中,但我不能完全做到这一点,因为我只能将一个投影函数放入 `.选择()。

我希望我能做这样的事情:

q = from s in dc.Series
select new
{
Series = SeriesLinkViewModel.FromSeries.Compile()(s),
Description = s.Description
};

但我遇到了一个异常(exception):

System.InvalidCastException: Unable to cast object of type 'System.Linq.Expressions.FieldExpression' to type 'System.Linq.Expressions.LambdaExpression'.

或者我至少可以在一次往返中以某种方式完成所有这些查询吗?我知道 TransactionScope 用于进行更改,但我不认为它会导致一次完成所有查询。

最佳答案

LinqKit 解决了这个问题:

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
};

关于linq - 如何在 Linq 中组合多个重构的 Select 表达式(到 EF 或 SQL)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4183891/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com