[英]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();
基本上,我正在尝试在两个表, UPC
和Inventory
,并且希望只有一个满足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.