Linq to NHibernate Distinct() Тип выражения не поддерживается ошибка

У меня есть следующий код:

 var data = (from v in this.GetSession().Query<WorkCellLoadGraphData>()
                    where v.WorkCellId == "13"
                    select
                        new WorkCellLoadGraphData
                            {   
                                RowId = v.RowId,
                                WorkCellId = v.WorkCellId,
                                WorkCellName = v.WorkCellName,
                                WorkCellGroupId = v.WorkCellGroupId,
                                WorkCellGroupName = v.WorkCellGroupName
                            });
        return data.Distinct();

Если я не вызываю метод расширения Distinct(), у меня нет никаких проблем. Однако, если я вызываю метод Distinct(), я получаю следующую ошибку:

Тип выражения 10005 не поддерживается этим SelectClauseVisitor.

После некоторых поисков я наткнулся на это:

https://nhibernate.jira.com/browse/NH-2380

Но, как видите, я не возвращаю анонимный тип.

Кто-нибудь еще сталкивался с этой проблемой? Если да, то как вы ее решили?

Дэйвид


person DavidS    schedule 04.01.2011    source источник
comment
Отличие работает, когда я не перечисляю присваивания, т. е. если бы я использовал select v, отличие не вызвало бы никаких проблем.   -  person DavidS    schedule 05.01.2011


Ответы (1)


Может ли это работать? Используя анонимный тип в запросе, вы позволите NHibernate выполнять отдельный запрос в базе данных. При использовании собственного типа сравнение должно использоваться с методом Equals класса.

 var data = (from v in this.GetSession().Query<WorkCellLoadGraphData>()
                where v.WorkCellId == "13"
                select
                    new 
                        {   
                            v.RowId,
                            v.WorkCellId,
                            v.WorkCellName,
                            v.WorkCellGroupId,
                            v.WorkCellGroupName
                        })
                        .Distinct()
                        .Select (v => 
                        new WorkCellLoadGraphData{
                            RowId = v.RowId,
                            WorkCellId = v.WorkCellId,
                            WorkCellName = v.WorkCellName,
                            WorkCellGroupId = v.WorkCellGroupId,
                            WorkCellGroupName = v.WorkCellGroupName});
person Øyvind Skaar    schedule 26.01.2012
comment
Я не уверен, что это сработает, так как я больше не работаю с NHibernate. Но, надеюсь, это кому-то поможет. - person DavidS; 26.01.2012