1

这是我的代码:

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; 我该如何做我想要完成的事情?

谢谢。

4

1 回答 1

3

您的查询是对IUPCItem项目的查询,而不是对IUIUPCItemShort项目的查询。看起来他们查询提供者不知道如何翻译该Cast转换的操作。

如果您知道IUPCItem在您的 C# 代码中可以转换为 a,IUIUPCItemShort那么您可能只是想避免让查询提供程序尝试处理Cast. 确保在 Linq to Objects 中完成,如下所示:

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

如果这不起作用,则意味着该类型确实不是隐式可转换的;您需要确定如何正确地IUIUPCItemShort从 a获取一个实例IUPCItem,可能创建一个方法来处理您调用使用的转换Select

于 2013-04-17T15:33:09.573 回答