Не удается получить объекты по группам или по составным ключам с помощью Linq Nhibernate - PullRequest
4 голосов
/ 04 января 2011

Я пытаюсь выполнить группу по запросу Linq с NH3. Зная основные трудности SQL, я знаю, что это невозможно, но в идеале я хотел бы сделать группу сущностью и получить ее полностью. Что-то вроде:

var list = from proposals in Session.Query<Proposal>()
           group proposals by proposals.Job
           into jobGrouping
           select new {
               Job = jobGrouping.Key, 
               TotalProposals = jobGrouping.Count()
           };

Это создает недопустимый запрос SQL, поскольку он пытается получить всю сущность Job, но группирует только по ее идентификатору.

Я пробовал группировать по составному полю:

 var list = from proposals in Session.Query<Proposal>()
                   group proposals by new { proposals.Job.Name, proposals.Job.Status}
                   into jobGrouping
                   select new {
                      Job = jobGrouping.Key.Name, 
                      Status = jobGrouping.Key.Status, 
                      TotalProposals = jobGrouping.Count()
                   };

Но всякий раз, когда я пытаюсь это сделать, я получаю исключение, когда NHibernate пытается построить дерево выражений:

Элемент с таким же ключом уже добавлен.

Кто-нибудь знает, есть ли способ сделать это с помощью NHibernate?

Спасибо, Илан

1 Ответ

0 голосов
/ 17 января 2014

У меня была похожая проблема при попытке использовать метод расширения .Join несколько раз, когда псевдоним дерева выражений был взят непосредственно из имени параметра lambda.

Мои знания о синтаксисе SQL Like linq ограничены, ноЯ бы предположил, что это каким-то образом переводится в свободный эквивалент, где имена лямбда-псевдонимов автоматически присваиваются.

Если это так, то возможно, что, переведя это в свободный синтаксис с явными уникальными псевдонимами labmda, вы могли бы избежать проблемы

...