[linq2db] Обявление своего агрегата
От: Genius_P Россия  
Дата: 12.07.13 09:42
Оценка:
Как в 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:
Re: [linq2db] Обявление своего агрегата
От: IT Россия linq2db.com
Дата: 12.07.13 14:20
Оценка:
Здравствуйте, Genius_P, Вы писали:

G_P>Как в linq2db использовать пользовательские агрегатные функции Sql Server?


Пока никак. Но задача интересная, надо её подумать. Где можно посмотреть как создавать такие функции?
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: [linq2db] Обявление своего агрегата
От: Genius_P Россия  
Дата: 13.07.13 08:42
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Genius_P, Вы писали:


G_P>>Как в linq2db использовать пользовательские агрегатные функции Sql Server?


IT>Пока никак. Но задача интересная, надо её подумать. Где можно посмотреть как создавать такие функции?


Здесь пример от создания до использования функции.
Re[2]: [linq2db] Обявление своего агрегата
От: Genius_P Россия  
Дата: 06.06.14 04:13
Оценка:
Здравствуйте, IT, Вы писали:
IT>Пока никак. Но задача интересная, надо её подумать. Где можно посмотреть как создавать такие функции?
Не подскажите какое решение в итоге принято?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.