我正在寻找一种方法来创建一个可以在我的Linq查询中使用的函数,该函数将转换为SQL。回到我们使用Linq-to-SQL时,我提出了类似的question。答案是映射到数据库中的UDF。我们正在使用代码优先模型,因为模型定义的清晰度,但遗憾的是没有办法define functions,映射到函数,并映射到存储过程,据我所知(我想这个想法作为该代码首先应该生成数据库,我不应该添加它的东西)。对我来说似乎不具备可扩展性,因为它不允许使用简单的方法来处理可能随着时间推移而发展的低效率,但这既不是在这里也不是......
无论如何,我知道我可以定义谓词表达式,它将转换为我可以在我的查询中使用的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”之前,我的例子就是那个例子。我还有无数其他方法可以使用它。提前谢谢。
答案 0 :(得分:3)
你可以试试LinqKit:http://www.albahari.com/nutshell/linqkit.aspx 使用.AsExpandable()和.Compile(),它允许在Linq查询中使用表达式。