Кодекс сначала Entity Framework 6.1 Пользовательская агрегатная функция

У меня есть пользовательская функция агрегирования CLR на SQL Server для расчета процентилей. Можно ли вызвать мою пользовательскую агрегатную функцию через Entity Framework? Как сопоставление настроено для этого?

Я пытался использовать функции codefirst, аналогичные описанным наEntity Framework 6 Code Первые пользовательские функцииоднако, похоже, что функциям разрешено принимать только параметры масштабирования, где моя функция является агрегатной функцией, поэтому необходимо будет взять список элементов (аналогично тому, как работают Sum, Averagg и Count).

Агрегатные функции имеют следующую сигнатуру, принимая значение, от которого мы хотим получить медиану и процентиль (50 - медиана, 25 - нижний квартиль, 75 - верхний квартиль)

CREATE AGGREGATE [dbo].[Percentile]
(@value [float], @tile [smallint])
RETURNS[float]
EXTERNAL NAME [SqlFuncs].[Percentile]
GO

Я попытался добавить DbFunctionAttribute, но не совсем уверен, как подключить его к модели хранилища структуры сущностей, используя код в первую очередь.

[DbFunction("SqlServer", "Percentile")]

public static double? Percentile(IEnumerable<int?> arg, int tile)
{
    throw new NotSupportedException("Direct calls are not supported.");
}

Что я ищу, так это чтобы я мог написать что-то вроде

paymentsTable
    .GroupBy(x=>x.CustomerId)
    .Select(new{
            Median = MyDbContext.Percentile(x.Select(g=>g.Amount), 50)
    });

Который будет отображаться в SQL как

SELECT [dbo].[Percentile](Amount, 50) as Median
FROM Payments
GROUP BY CustomerId

Ответы на вопрос(1)

Ваш ответ на вопрос