我正在尝试将SqlFunctions.DatePart
与我根据参数更改的字符串一起使用,但我似乎无法让它工作。
我的代码:
String dateArg = @"week";
var results = db.Orders
.GroupBy(x => new
{
Completed = SqlFunctions.DatePart(@dateArg, x.Completed)
})
.Select(x=>x.Sum(y => y.Total))
.ToList();
失败,出现以下错误:
' SqlServer.DATEPART'的DATEPART参数。函数必须是文字字符串。
答案 0 :(得分:3)
嗯,@dateArg
不是文字字符串,就像那样简单。但"week"
是。{/ p>
如果您需要更改DATEPART
的分组类型,您需要将案例分开(“年”,“月”,“周”,我猜这些就是这些需要)。这是笨拙的,但它是将表达式树编译为查询操作的方式的结果 - 就像在T-SQL本身中一样,DATEPART的第一个参数不能是参数(它们也可能创建了单独的方法{{ 1}},DatePartYear
等等,这会使限制更加明显,你应该想到这样的调用。)
答案 1 :(得分:1)
我知道这是一个老问题,但也许这会对某人有所帮助。只需使用内联if语句,如下所示:
string datePart = "week";
var results = db.Table.GroupBy(item =>
(datePart == "quarter") ? SqlFunctions.DatePart("quarter", item.Date) :
(datePart == "month") ? SqlFunctions.DatePart("month", item.Date) :
SqlFunctions.DatePart("week", item.Date));
答案 2 :(得分:0)
var results = db.Orders
.GroupBy(x => new
{
Completed = SqlFunctions.DatePart("week", x.Completed)
})
.Select(x=>x.Sum(y => y.Total))
.ToList();