繁体   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