2013-04-17 81 views
1

這裏是我的代碼:加入兩個表之間使用LINQ,從只有一個返回記錄

public IEnumerable<IUIUPCItemShort> GetActiveWithDefaultCost() 
    { 
     var query = from upc in DataManagerFactory.Get().Manage<IUPCItem>().GetAll() 
        join inv in DataManagerFactory.Get().Manage<IInventory>().GetAll() on upc.UPCID equals inv.UPCID 
        where inv.ExitDate == null 
         && upc.UnitCost == null 
        select upc; 
     return 
      query.Cast<IUIUPCItemShort>().ToList(); 

基本上,我試圖做兩個表,UPCInventory之間的加入,並希望有一個列表只有UPC滿足WHERE條件,因爲我只想向用戶顯示一個UPC的列表。我明明我做的事情真的錯了,因爲我得到這個消息:

無法轉換類型「System.Linq.Expressions.MethodCallExpressionN」的對象鍵入「SubSonic.Linq.Structure.ProjectionExpression」。

我認爲這個問題是在我的LINQ代碼,especifically在select upc; 我該怎麼辦我想要實現什麼?

謝謝。

回答

3

您的查詢的IUPCItem項目,而不是IUIUPCItemShort項的查詢。看起來他們查詢提供者不知道如何翻譯該轉換的Cast操作。

如果你知道IUPCItem在C#代碼可以轉換爲IUIUPCItemShort然後iyou可能只是想避免的查詢提供嘗試處理Cast。確保它的LINQ的完成到對象,像這樣:

return query.AsEnumerable(). 
    Cast<IUIUPCItemShort>() 
    .ToList(); 

如果不工作,那麼就意味着該類型真的是不隱式轉換;您需要確定如何從IUPCItem正確獲取IUIUPCItemShort的實例,可能會創建一個方法來處理您使用Select調用的轉換。

+0

添加AsEnumerable()做到了。我認爲它會是那麼簡單,但是你爲我節省了幾個小時的研究和試驗和錯誤。謝謝! – Antrim

相關問題