【问题标题】:Cannot implicitly convert type System.Collection.Generic.IEnumberable无法隐式转换类型 System.Collection.Generic.IEnumerable
【发布时间】:2010-03-08 13:47:13
【问题描述】:

我在 Linq 语句中收到此错误 ---

无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“hcgames.ObjectClasses.ShoppingCart.ShoppingCartCartAddon”。存在显式转换(您是否缺少演员表?)

来自这个查询

        ShoppingCartItems items = Cart.GetAllItems();
        ShoppingCartCartAddons addons = Cart.GetAllAddons();

      var  stuff = from x in items
                    select new ShoppingCartItem()
                    {
                        ProductID = x.ProductID,
                        Quantity = x.Quantity,
                        Name = x.Name,
                        Price = x.Price,
                        Weight = x.Weight,
                        Addons =  (from y in addons
                                  where y.ShoppingCartItemID == x.ID
                                  select y)
                    };

我不知道如何正确投射。有什么建议吗?

感谢您的帮助!

【问题讨论】:

  • 你能发ShoppingCartCartAddonsShoppingCartItems.Addons签名吗?
  • 命名空间 hcgames.ObjectClasses.ShoppingCart { [Serializable] public class ShoppingCartItem { public ShoppingCartItem();公共 ShoppingCartItem(DataRow 博士);公共 ShoppingCartCartAddons 插件 { get;放; } 公共字符串 CartID { 获取;放; } 公共 int ID { 获取;放; } 公共字符串图像 { 获取;放; } 公共字符串名称 { 获取;放; } 公共字符串价格 { 获取;放; } 公共长产品 ID { 获取;放; } 公共 int 数量 { 获取;放; } 公共十进制重量 { 得到;放; } } }
  • 使用系统;使用 System.Collections.ObjectModel;命名空间 hcgames.ObjectClasses.ShoppingCart { [Serializable] 公共类 ShoppingCartCartAddons : Collection { public ShoppingCartCartAddons(); } }
  • 命名空间 hcgames.ObjectClasses.ShoppingCart { [Serializable] 公共类 ShoppingCartCartAddon { public ShoppingCartCartAddon();公共 ShoppingCartCartAddon(DataRow dr);公共字符串 LabelText { 获取;放; } 公共字符串名称 { 获取;放; } 公共小数价格 { 获取;放; } 公共 int ProductAddonID { 获取;放; } 公共十进制数量 { 得到;放; } public long ShoppingCartAddonID { get;放; } public long ShoppingCartItemID { get;放; } 公共十进制重量 { 得到;放; } } }
  • 好吧,编辑了我的答案,为了将来参考,您可以编辑您的问题以添加更多细节(和闪亮的格式化代码),而不是在 cmets 中进行:)

标签: c# asp.net linq


【解决方案1】:

我在黑暗中拍摄,因为我不知道ShoppingCartItem.Addons 是什么类型,但从错误来看,我会说它期望该类型是hcgames.ObjectClasses.ShoppingCart.ShoppingCartCartAddon

您的 LINQ 查询变成了 IEnumerable<ShoppingCartCartAddon>。您可以将 .FirstOrDefault() 添加到 LINQ 查询中,看看是否可以解决问题。

【讨论】:

    【解决方案2】:

    考虑到您发布的代码,至少有一种方法可以解决它。更简单,不太优雅的是修改您的 ShoppingCartItem.Addons 签名,如下所示,因为您的 ShoppingCartCartAddons 集合没有任何其他功能:

    namespace hcgames.ObjectClasses.ShoppingCart 
    { 
        [Serializable] 
        public class ShoppingCartItem 
        {
            public ShoppingCartItem(); 
            public ShoppingCartItem(DataRow dr); 
            public IEnumerable<ShoppingCartCartAddon> Addons { get; set; } 
            public string CartID { get; set; } 
            public int ID { get; set; } 
            public string Image { get; set; } 
            public string Name { get; set; } 
            public string Price { get; set; } 
            public long ProductID { get; set; } 
            public int Quantity { get; set; } 
            public decimal Weight { get; set; } 
        }
    }
    

    解释:您基本上是在尝试从IEnumerable&lt;ShoppingCartCartAddon&gt; 初始化Collection&lt;ShoppingCartCartAddon&gt; 实现,ShoppingCartCartAddons,因此编译器会出错。

    否则,您可以为ShoppingCartCartAddons 定义一个构造函数,它接受IEnumerable&lt;ShoppingCartCartAddon&gt; 来初始化自己。

    【讨论】:

    • 我确实将它定义为 ShoppingCartCartAddons。现在发布代码。
    猜你喜欢
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    相关资源
    最近更新 更多