nhibernate комплексное проекционное выражение - PullRequest
3 голосов
/ 12 января 2011

Я пытаюсь использовать nhibernate для извлечения данных из базы данных mysql. Однако мне нужен прогноз для выполнения некоторых расчетов. Nhibernate, похоже, не нравится. Отлично работает с linq to sql.

        var purchases = _session.QueryOver<Purchase>()
                        .Where(validPID<Purchase>(portfolioID))
                        .SelectList(list => list
                            .SelectGroup(c => c.currency)                                
                            .SelectSum(c => c.shares * c.price - c.commission))

Я получаю сообщение "Не удалось определить участника из ((c.shares * c.price) - c.commission)" как ошибку.

Как я могу написать это для работы?

Спасибо

Ответы [ 3 ]

0 голосов
/ 13 января 2011

Почему бы вам не использовать вместо HQL.Я не уверен, как перевести ваш запрос в HQl, потому что я не могу понять, как это сделать, но ваши искусственные операции будут поддерживаться в HQL.

Если вы можете объяснить, что вы делаете, я могу;помочь вам с запросом.

0 голосов
/ 14 января 2011

Я на самом деле подвел итог в коде, подобном этому

        var purchases = (from p in _session.QueryOver<Purchase>()
                                    .Where(validPID<Purchase>(portfolioID)).List().ToList()
                         group p by p.currency into currencies
                         select new object[2] {
                            currencies.Key, 
                            currencies.Sum(f => -1*f.price*f.shares - f.commission)
                        }).ToList();
0 голосов
/ 12 января 2011

Какую библиотеку расширений Linq вы используете, у которой есть SelectList, SelectGroup и SelectSum?Они не являются стандартными методами для этих операций и не являются расширениями, предоставленными NH.Таким образом, NHibernate, вероятно, понятия не имеет, что с ними делать.Как правило, при построении запроса Linq2NH нельзя использовать какие-либо пользовательские методы расширения;если он не пришел из System.Linq или NHibernate.Linq, вы не можете его использовать (одно из очень немногих исключений - IEnumerable.Contains (), которое переводит в запрос IN)

Попробуйте вставитьВызов AsEnumerable () после метода Where.Это в основном заставит вычислять дерево выражений Queryable, и все дальнейшие операции будут выполняться в памяти объектов (или их прокси-серверов NH, заполненных по мере необходимости).

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