Как в linq2db использовать
пользовательские агрегатные функции Sql Server?
Создаю описание функции:
static class fn
{
[Sql.Expression( "SumStr({1})", ServerSideOnly = true)]
public static string SumStr<TSource>( this IEnumerable<TSource> src, Expression<Func<TSource, string>> @Value)
{
throw new InvalidOperationException();
}
}
Пишу запрос:
var db = new DataModel.DatabaseDB();
var data = db.Organizations.GroupBy(_ => 1).Select(g => g.SumStr(_ => _.Name));
var res = data.ToArray();
И получаю исключение:
LinqToDB.Linq.LinqException was unhandled
HResult=-2146233088
Message='_ => _.Name' cannot be converted to SQL.
Source=linq2db
StackTrace:
в LinqToDB.Linq.Builder.ExpressionBuilder.ConvertToSql(IBuildContext context, Expression expression, Boolean unwrap)
в LinqToDB.Linq.Builder.ExpressionBuilder.<>c__DisplayClass99.<ConvertToSql>b__96(Expression t)
в System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
в System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
в System.Collections.Generic.List`1.AddRange(IEnumerable`1 collection)
в LinqToDB.Linq.Builder.ExpressionBuilder.ConvertToSql(IBuildContext context, Expression expression, Boolean unwrap)
в LinqToDB.Linq.Builder.ExpressionBuilder.ConvertToSqlExpression(IBuildContext context, Expression expression)
в LinqToDB.Linq.Builder.ExpressionBuilder.BuildSql(IBuildContext context, Expression expression)
в LinqToDB.Linq.Builder.ExpressionBuilder.<>c__DisplayClass56.<BuildExpression>b__55(Expression expr)
в LinqToDB.Expressions.Extensions.Transform(Expression expr, Func`2 func)
в LinqToDB.Linq.Builder.ExpressionBuilder.BuildExpression(IBuildContext context, Expression expression)
в LinqToDB.Linq.Builder.SelectContext.BuildExpression(Expression expression, Int32 level)
в LinqToDB.Linq.Builder.SelectContext.BuildQuery[T](Query`1 query, ParameterExpression queryParameter)
в LinqToDB.Linq.Builder.ExpressionBuilder.Build[T]()
в LinqToDB.Linq.Query`1.GetQuery(IDataContextInfo dataContextInfo, Expression expr)
в LinqToDB.Linq.ExpressionQuery`1.GetQuery(Expression expression, Boolean cache)
в LinqToDB.Linq.ExpressionQuery`1.Execute(IDataContextInfo dataContextInfo, Expression expression)
в LinqToDB.Linq.ExpressionQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
в System.Linq.Buffer`1..ctor(IEnumerable`1 source)
в System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
в ConsoleApplication1.Program.Main(String[] args) в c:\Users\Genius.COMPENG\Documents\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs:строка 15
в System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
в System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart()
InnerException: