Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ的Cast问题_C#_Linq_Nhibernate - Fatal编程技术网

C# LINQ的Cast问题

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(

我正试图让我的产品的类型与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().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();