代码之家  ›  专栏  ›  技术社区  ›  Ocelot20

创建可转换为SQL的方法?

  •  4
  • Ocelot20  · 技术社区  · 14 年前

    在我正在使用的应用程序的数据库中,有一条记录有一个“日期”字段。在 许多的 在代码中,我们需要将其转换为一个会计年度,以便进行分组、选择和筛选。下面是一些查询的示例:

    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方法只会抛出“cannottranslatetosql”异常。显然,这可以在某种程度上转换为SQL,我只是不知道是否有可能以一种简单的方式重新创建linqtosql以供重用。

    提前谢谢。

    1 回复  |  直到 14 年前
        1
  •  5
  •   James Curran    14 年前

    您需要执行以下操作:

    [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();