首页 > 解决方案 > 使用 Linq2DB for PostgreSQL 按周分组

问题描述

我正在为 PostgreSQL 使用 Linq2DB。我需要在 Linq 中按周对数据进行分组。下面是我的代码:

Func<DateTime,int> weekProjector = d => CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(d,
                                                         CalendarWeekRule.FirstFourDayWeek,
                                                         DayOfWeek.Sunday);

var ddquery = from t in db.VLogData
              group t by weekProjector(t.NewTime);

foreach (var f in ddquery)
{
    f.Key.ToString();
}

但它在那里显示错误或foreach

(xxx.Controllers.DashboardController+<>c__DisplayClass1_0).weekProjector, selectParam.NewTime)'无法转换为 SQL。'

我可以知道那里有什么问题吗?

标签: postgresqllinqlinq2db

解决方案


weekProjector是一个客户端函数,但您将服务器端数据作为输入传递给它。要使其工作,您可以:

  • AsEnumerable()通过在 Select 和调用之间粘贴调用来在客户端上执行分组GroupBy(有史以来最糟糕的选择)
  • Sql.ExpressionAttribute通过应用或Sql.ExtensionAttribute使用weekProjectorSQL 表达式并IsAggregate=true设置属性来告诉 linq2db 使用哪个聚合逻辑
  • 与之前相同,但ExpressionMethodAttribute使用 C# 表达式定义聚合逻辑

推荐阅读