这是我的代码:
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
之间进行联接,并且希望只有UPC
的列表满足WHERE
因为我只想向用户显示UPC
的列表。我显然做了一些非常错误的事情,因为我得到了这样的信息:
无法将“System.Linq.Expressions.MethodCallExpressionN”类型的对象强制转换为“SubSonic.Linq.Structure.ProjectionExpression”。
我认为问题出在我的Linq代码中,特别是select upc;
我怎样才能做我想要完成的事情?
感谢。
答案 0 :(得分:3)
您的查询是IUPCItem
项目的查询,而不是IUIUPCItemShort
项目的查询。看起来他们的查询提供程序似乎不知道如何翻译该转换的Cast
操作。
如果您知道C#代码中的IUPCItem
可转换为IUIUPCItemShort
,那么您可能只是想避免让查询提供程序尝试处理Cast
。确保它在Linq to Objects中完成,如下所示:
return query.AsEnumerable().
Cast<IUIUPCItemShort>()
.ToList();
如果这不起作用,则意味着该类型确实不可隐式转换;您需要确定如何从IUIUPCItemShort
正确获取IUPCItem
的实例,可能会创建一种方法来处理您使用Select
调用的转化。