我正在寻找一种方法来创建一个可以在我的 Linq 查询中使用的函数,该函数将转换为 SQL。当我们使用 Linq-to-SQL 时,我提出了一个类似的问题。答案是映射到数据库中的 UDF。由于模型定义的简洁性,我们使用代码优先模型,但不幸的是,据我所知,没有办法定义函数、映射到函数和映射到存储的过程(我猜这个想法是代码首先应该生成数据库,我不应该向它添加东西)。对我来说似乎不是很有可扩展性,因为它没有简单的方法来处理可能随着时间而演变的低效率,但这既不是这里也不是那里......
无论如何,我知道我可以定义谓词表达式,这些表达式将转换为我可以在查询中使用的 SQL,如下所示:
public static Expression<Func<MyEntity, bool>> FilterMe(int comparisonNumber)
{
return x => x.SomeProperty == comparisonNumber;
}
var query = MyEntities.Where(FilterMe(1));
这是否仅适用于返回的表达式bool
?我正在寻找类似的东西:
var query = from m in MyEntities
let endDate = GetEndDate(m.Start, m.Duration)
where endDate <= DateTime.Now
select m;
有什么方法可以构建GetEndDate
表达式函数吗?当我在查询中长期编写代码时,其中的代码GetEndDate
可以很好地转换为 SQL,但它很长而且阅读起来很混乱。
编辑 - 哦,在有人回答“使用 SQLFunctions for DateAdd”之前,我的例子就是这样......一个例子。还有无数其他我想使用它的方法。提前致谢。