C# LINQ的Cast问题
我正试图让我的产品的类型与Linq列表C# LINQ的Cast问题,c#,linq,nhibernate,C#,Linq,Nhibernate,我正试图让我的产品的类型与Linq列表 var types = (from t in NHibernateSession.Linq<Product>() select t.ProductType).Distinct().ToList<ProductType>(); return types; var types=(来自NHibernateSession.Linq()中的t) 选择t.ProductType).Distinct(
var types = (from t in NHibernateSession.Linq<Product>()
select t.ProductType).Distinct().ToList<ProductType>();
return types;
var types=(来自NHibernateSession.Linq()中的t)
选择t.ProductType).Distinct().ToList();
返回类型;
但它给出了一个无法强制转换类型错误的对象
“…Domain.Product”到类型“…Domain.ProductType”
ProductType是产品的一个属性
<many-to-one name="ProductType" class="Portal.Domain.ProductType, TilePortal.Domain" column="ProductTypeID" not-null="true" ></many-to-one>
编辑:Linq to Nhibernate似乎还不够成熟,无法处理此类查询。我只是希望能够创建一个简单的SQL查询,从数据库中获取不同的ProductType,而不必带来所有产品,这对于拥有数百万产品的生产数据库来说是不可能的。因此,如果您可以使用HQL os Criteria API来说明如何做到这一点,该API也可以做到这一点。您可能会遇到nHibernate LINQ实现的问题。您是否在以下情况下遇到相同的错误:
var types = (from t in NHibernateSession.Linq<Product>()
select t.Type);
另一方面,我通常会避免创建一个名称与.NET framework中的某些内容冲突的类,尤其是像Type这样的基本类。这只会导致混乱。也许您应该将其重命名为ProductType。我很确定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=(来自NHibernateSession.Linq()中的t)
选择t).ToList().select(t=>t.Type).Distinct().ToList();
返回类型;
如果您没有使用最新版本的提供程序,请更新并重试您的示例。如果它得到实施,它应该可以正常工作
更新
如果你只想得到所有的产品类型。为什么不写这个简单的查询呢
var types = (from t in NHibernateSession.Linq<ProductType>()
select t).ToList();
var types=(来自NHibernateSession.Linq()中的t)
选择t.ToList();
当您需要类型时,无需查询您的产品。产品和类型之间的关系是什么?是否在var types行上?或者返回类型行?因为您选择的是
Type
属性,并且假设Product.Type
返回类型为Type
的对象,所以根本不需要.ToList()
。您能否向我们展示产品
对象并解释其与类型
的关系?@yigit,请参阅我的更新答案。当您需要产品类型时,不需要查询产品。我以前使用LINQ到NHibernate扩展执行过类似的查询,没有问题。这不是一个特别复杂的问题,这不是他想要的。您不能从DB中获取数百万个产品,然后对它们的Type属性执行不同的操作。需要将Distinct应用于初始SQL语句。(我还想知道在nhibernate上是如何做到的——也许是使用连接?@kaivalya,当然这不是一个好的查询,不应该是生产中的用户。但我认为nhibernate的linq提供程序不支持这种查询(可能是在更高版本中),这是使用linq 2 nh编写精确查询的唯一方法;
var types = (from t in NHibernateSession.Linq<ProductType>()
select t).ToList();