我想把我的产品类型带到Linq的列表中。
var types = (from t in NHibernateSession.Linq<Product>()
select t.ProductType).Distinct().ToList<ProductType>();
return types;
但它给出了一个Unable来抛出类型错误的对象
'... Domain.Product'键入'... Domain.ProductType'。
ProductType是Product的属性。
<many-to-one name="ProductType" class="Portal.Domain.ProductType, TilePortal.Domain" column="ProductTypeID" not-null="true" ></many-to-one>
编辑:似乎Linq对Nhibernate还不够成熟,无法处理此类查询。我只是希望能够创建一个简单的SQL查询,从DB中获取不同的ProductType,而不会为具有数百万产品的生产数据库带来所有产品。因此,如果您可以使用HQL os Criteria API来说明如何执行此操作,那么也将执行此操作。
答案 0 :(得分:2)
您可能遇到了nHibernate LINQ实现的问题。你得到同样的错误:
var types = (from t in NHibernateSession.Linq<Product>()
select t.Type);
如果没有,当您尝试使用非通用ToList()
时会发生什么?
var types = (from t in NHibernateSession.Linq<Product>()
select t.Type).Distinct().ToList();
顺便说一句,我通常会避免创建一个名称与.NET框架中的某些内容冲突的类,尤其是类似于Type的基本类。它只会导致混乱。也许您应该将其重命名为ProductType。
答案 1 :(得分:1)
我很确定linq 2 nh的实现还不支持这种事情。您可能必须先执行sql然后选择类型引用。像这样:
var types = (from t in NHibernateSession.Linq<Product>()
select t).ToList().Select(t => t.Type).Distinct().ToList<Type>();
return types;
如果您没有使用最新版本的提供商,请更新并再次尝试您的示例。如果实施它应该可以正常工作。
<强>更新强>
如果您唯一想做的就是获取所有产品类型。为什么不写这个简单的查询?
var types = (from t in NHibernateSession.Linq<ProductType>()
select t).ToList();
当您需要类型时,无需查询您的产品。