Linq到NHibernate Distinct()“不支持表达式类型”错误

时间:2011-01-04 14:20:24

标签: distinct linq-to-nhibernate

我有以下代码:

 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

但是你可以看到我没有回复匿名类型。

还有其他人遇到过这个问题吗?如果是这样,你是如何解决的?

大卫

1 个答案:

答案 0 :(得分:0)

这可行吗?通过在查询中使用匿名类型,您将允许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});