Группировка LINQ по функции SQL - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь выполнить запрос linq, в котором поле даты преобразуется в конец квартала (31-03-2019, 30-06-2019), а затем группируется.Дата конвертируется с использованием функции SQL, сопоставленной с моим DBContext

. Это может быть достигнуто в MS SQL с помощью этого запроса

select dbo.EOQuarter(EndDate) as EndDate, SUM(ValueChange) as ValueChange from StockIndexMonths
group by dbo.EOQuarter(EndDate)

При портировании на linq я получаю 'NotSupportedException: указанный метод неподдерживается.Функции работают, когда используются в простом запросе выбора.Можно ли использовать функции в групповом режиме?

var list = 
  (from sm in _context.StockIndexMonths
   group sm by _context.EOQUARTER(sm.EndDate) into itemGroup
   select new
   {
     Date = _context.EOQUARTER(itemGroup.Key),
     Value = itemGroup.Sum(x => x.ValueChange)
   }).ToList();

DBContext

public partial class myContext : DbContext
{
  protected override void OnModelCreating(ModelBuilder modelBuilder)
  {
    ...
    modelBuilder.HasDbFunction(() => EOQUARTER(new DateTime()));
    modelBuilder.HasDbFunction(() => TESTUPPER(""));
  }

  [DbFunction()]
  public DateTime EOQUARTER(DateTime date) => throw new NotSupportedException();
  [DbFunction()]
  public string TESTUPPER(string value) => throw new NotSupportedException();
}

оценили, спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...