gpt4 book ai didi

c# - 创建转换为 SQL 的方法?

转载 作者:太空狗 更新时间:2023-10-30 01:10:53 24 4
gpt4 key购买 nike

在我正在使用的应用程序的数据库中,有一条包含“日期”字段的记录。在代码的许多处,我们需要将其转换为财政年度以进行分组、选择和过滤。因此,这里有一些查询的示例:

var query = from r in DB.records
let fy = r.Date.Month >= 10 ? r.Year + 1 : r.Year
where fy = 2010
select r;

现在我知道我可以编写一个表达式方法来使用相同的过滤器,但是如果我想用它来进行选择和分组怎么办?我不想在所有查询中一遍又一遍地写第二行。能够做到这一点会很好:

var query = from r in DB.records
let fy = r.Date.GetFY()
where fy = 2010
group r by fy into g
select g.Count();

这样一来,不同的客户可以有不同的 FY 定义等,并在同一个地方定义它们。有什么办法吗?编写普通的 GetFY 方法只会抛出“无法转换为 SQL”(或实际上是什么)异常。显然,这可以在某种程度上转换为 SQL,我只是不知道是否有可能以一种简单的方式重新创建 LINQ to SQL 以供重用。

提前致谢。

最佳答案

如果您可以将其编写为 SQL 函数,则可以创建一个虚拟 C# 函数以在 LINQ 代码中使用,并告诉 LINQ 将其映射到您的 SQL 函数。映射是通过属性完成的。

您需要执行以下操作:

[Function(Name = "udf_GetFY", IsComposable = true)]
public int getFY(DateTime t)
{
return 5; // value doesn't matter
}

然后:

 var query = from r in DB.records 
let fy = GetFY(r.Date)
where fy = 2010
group r by fy into g
select g.Count();

关于c# - 创建转换为 SQL 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3790744/

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