簡體   English   中英

在兩個表之間使用LINQ加入,只從其中一個表返回記錄

[英]Join using LINQ between two tables, return records from only one of them

這是我的代碼:

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 ,並且希望只有一個滿足WHERE條件的UPC列表,因為我只想向用戶顯示UPC列表。 我顯然做了一些非常錯誤的事情,因為我得到了這樣的信息:

無法將類型為“System.Linq.Expressions.MethodCallExpressionN”的對象強制轉換為“SubSonic.Linq.Structure.ProjectionExpression”。

我認為問題出在我的Linq代碼中,特別是在select upc; 我該怎樣做我想要完成的事情?

謝謝。

您的查詢是IUPCItem項的查詢,而不是IUIUPCItemShort項的查詢。 看起來他們的查詢提供程序似乎不知道如何轉換該轉換的Cast操作。

如果你知道IUPCItem在你的C#代碼轉換為一個IUIUPCItemShort然后iyou可能只是想避免的查詢提供嘗試處理的Cast 確保它在Linq to Objects中完成,如下所示:

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

如果這不起作用,則意味着該類型實際上不可隱式轉換; 您需要確定如何從IUPCItem正確獲取IUIUPCItemShort的實例,可能創建一個方法來處理您使用Select調用的轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM