0

我有一个功能说

GetGroupByData(DateTime p1,DateTime p2) 
{
    var data = dbContex.tableName
                       .Where(someconditions)
                       .GroupBy(x=>SqlScalarFunction(x.DateStart,p1));
}

     CREATE FUNCTION dbo.SqlScalarFunction(@Date DateTime, @DateFirst DateTime) 
     RETURNS Int 
     AS 
       BEGIN 
        RETURN Cast((cast(@Date - @DateFirst as float) / 7.0) as int) + 1
         END

我收到一个错误:

列 'tableName.DateStart' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。
无法准备报表。

如何实现愿望分组?

4

2 回答 2

1

您可以使用通过标量值函数的结果对对象进行分组的另一种方法是为它创建一个域方法,并在您的代码中使用它,如下所示:

using (EntitiesModel dbContext = new EntitiesModel())
{
    var query = from obj in dbContext.MyTableNames
                group obj by EntitiesModel.SqlScalarFunction(someDate, someOtherDate) into objg
                select new
                {
                    MyRange = objg.Key,
                    MyResult = objg
                };
}

如果您使用的是域模型(一个 .rlinq 文件),您可以遵循本文中的指南,以创建SqlScalarFunction()域方法。如果你有一个流畅的模型,你需要在你的上下文类中手动为函数添加这样的方法——同一篇文章将向你展示该方法必须遵循的模式。

让我知道,如果这对你有用。

于 2014-08-21T12:27:30.377 回答
1

我解决了这个问题

GetGroupByData(DateTime p1,DateTime p2) 
{
 var function = "dbo.SqlScalarFunction({0}, '" + p1.ToString("yyyy-MM-dd HH:mm:ss") + "')";
   var data = dbContex.tableName.Where(someconditions)
   .GroupBy(x => function.SQL<Int32>(x.DateStartUTC));
}

我在这里找到了解决方案:http ://www.telerik.com/forums/converting-to-datetime-in-where-clause

于 2014-08-20T23:01:53.103 回答