Я пытаюсь выполнить запрос 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();
}
оценили, спасибо