2010-04-13 59 views
2

我正在使用Linq將我的產品類型列入清單。LINQ造成的問題

var types = (from t in NHibernateSession.Linq<Product>() 
      select t.ProductType).Distinct().ToList<ProductType>();   
return types; 

但它給人一種無法轉換類型錯誤的對象

'... 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查詢,從數據庫中獲取不同的ProductType,而不會將所有產品都帶入不具有數百萬產品的生產數據庫。因此,如果您可以說明如何使用HQL OS Criteria API執行此操作,那麼您也可以這樣做。

+2

產品和類型之間的關係是什麼? – 2010-04-13 12:12:46

+0

是否在var類型行上?或返回類型行? – Nix 2010-04-13 12:19:39

+1

既然您選擇了'Type'屬性,並假設'Product.Type'返回一個'Type'類型的對象,那麼您根本不需要'.ToList ()'。你能向我們展示'Product'對象並解釋它與'Type'的關係嗎? – 2010-04-13 12:36:40

回答

2

您可能會遇到nHibernate LINQ實現的問題。難道你得到了同樣的錯誤:

var types = (from t in NHibernateSession.Linq<Product>() 
       select t.Type); 

如果不是這樣,當您嘗試使用非通用ToList()會發生什麼?另外,我通常會避免創建一個名稱與.NET框架中的某些內容相沖突的類,特別是Type這樣的基本類。這隻會導致混亂。也許你應該把它重命名爲ProductType。

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(); 

當您需要類型時,無需查詢您的產品。

+0

我已經執行了類似的查詢使用LINQ到NHibernate的擴展沒有問題之前。這不是一個特別複雜的查詢。 – 2010-04-13 12:34:00

+0

這不是他所追求的。你不能從數據庫中獲取數以百萬計的產品,然後在他們的Type屬性上做一個明確的選擇。獨特的需要應用於初始SQL語句。 (我也想知道在nhibernate上做了什麼 - 也許使用連接?) – kaivalya 2010-04-13 12:37:37

+0

@kaivalya,當然這不是一個好的查詢,並且不應該是用戶在生產中。但是,我不認爲nhibernate的linq提供程序支持這種查詢(也許它是在更高版本中),這是用linq 2 nh編寫這個精確查詢的唯一方法。 – 2010-04-13 12:56:22