Oce*_*t20 6 .net linq entity-framework expression-trees ef-code-first
我正在寻找一种方法来创建一个可以在我的Linq查询中使用的函数,该函数将转换为SQL.回到我们使用Linq-to-SQL时,我提出了类似的问题.答案是映射到数据库中的UDF.我们正在使用代码优先模型,因为模型定义的清晰度,但遗憾的是没有办法定义函数,映射到函数,并映射到存储过程,据我所知(我想这个代码的想法首先应该生成db,我不应该向它添加内容).对我来说似乎不具备可扩展性,因为它不允许使用简单的方法来处理可能随着时间推移而发展的低效率,但这既不是在这里也不是......
无论如何,我知道我可以定义谓词表达式,它将转换为我可以在我的查询中使用的SQL,如下所示:
public static Expression<Func<MyEntity, bool>> FilterMe(int comparisonNumber)
{
return x => x.SomeProperty == comparisonNumber;
}
var query = MyEntities.Where(FilterMe(1));
Run Code Online (Sandbox Code Playgroud)
这仅适用于返回的表达式bool吗?我正在寻找以下内容:
var query = from m in MyEntities
let endDate = GetEndDate(m.Start, m.Duration)
where endDate <= DateTime.Now
select m;
Run Code Online (Sandbox Code Playgroud)
有没有办法构建GetEndDate表达式函数?GetEndDate当我在查询中长时间编写它时,内部代码转换为SQL就好了,但它很长并且令人困惑.
编辑 - 哦,在有人回答"使用SQLFunctions for DateAdd"之前,我的例子就是那个例子.我还有无数其他方法可以使用它.提前致谢.
您可以尝试使用 LinqKit:http://www.albahari.com/nutshell/linqkit.aspx 和 .AsExpandable() 和 .Compile(),它允许在 Linq 查询中使用表达式。