【问题标题】:Cannot implicitly convert type ‘System.Linq.IQueryable<AnonymousType#1>’ to ‘System.Collections.Generic.IEnumerable<SubCateViewModel>’无法将类型“System.Linq.IQueryable<AnonymousType#1>”隐式转换为“System.Collections.Generic.IEnumerable<SubCateViewModel>”
【发布时间】:2014-03-21 15:04:17
【问题描述】:

我在尝试加入三个表 ProductPhotoProductProductProductPhoto 时遇到了这个问题。我尝试了很多案例,但都没有成功。任何人都可以帮助我摆脱这种情况吗?感谢回复!

private IEnumerable<SubCateViewModel> GetSubProduct()
            {
                var context = new AdvenDBEntities();
                var subcate = (from a in context.ProductPhotoes
                              join b in context.ProductProductPhotoes on a.ProductPhotoID equals b.ProductPhotoID
                              join c in context.Products on b.ProductID equals c.ProductID
                              join d in context.ProductSubcategories on c.ProductSubcategoryID equals d.ProductSubcategoryID
                              select new
                              {
                                  a.ProductPhotoID,
                                  a.ThumbnailPhotoFileName,
                                  c.ProductID,
                                  c.Name,
                                  d.NameofBike,
                                  d.isSelected,
                              }).AsQueryable();
                         return subcate;
            }

【问题讨论】:

    标签: linq asp.net-mvc-4


    【解决方案1】:

    试试下面的代码伙伴..

    private IEnumerable<SubCateViewModel> GetSubProduct()
                    {
                        var context = new AdvenDBEntities();
                        var subcate = (from a in context.ProductPhotoes
                                      join b in context.ProductProductPhotoes on a.ProductPhotoID equals b.ProductPhotoID
                                      join c in context.Products on b.ProductID equals c.ProductID
                                      join d in context.ProductSubcategories on c.ProductSubcategoryID equals d.ProductSubcategoryID
                                      select new SubCateViewModel
                                      {
                                         ProductPhotoID =  a.ProductPhotoID,
                                          ThumbnailPhotoFileName = a.ThumbnailPhotoFileName,
                                         ProductID = c.ProductID,
                                          Name = c.Name,
                                          NameofBike = d.NameofBike,
                                          isSelected = d.isSelected,
                                      });
                                 return subcate.AsEnumerable();
                    }
    

    【讨论】:

    • 我遇到了同样的错误:Cannot initialize type 'AdventureCycle.Models.SubCateViewModel' with a collection initializer because it does not implement 'System.Collections.IEnumerable'
    • 是否支持 subcate.AsEnumerable();或(IEnumerable)subcate?
    • 它支持subcate.AsEnumerable();,但它在{ a.ProductPhotoID...行下发出红色信号并抛出该错误。
    • 你在说哪个?
    • 完美!非常感谢,@Neel! :)
    【解决方案2】:

    问题是您的匿名类型列表无法转换为 SubCateViewModel 列表。

    你为什么要使用匿名类型呢?只需在查询中创建一个新的 SubCateViewModel 实例(选择 SubCateViewModel 而不是匿名类型)。

    在 LINQ 中使用匿名类型:

    select new SubCateViewModel 
    {
    // Set class variables here...
    }
    

    【讨论】:

    • 我修复了你的答案,但它引发了新的错误:Cannot initialize type 'AdventureCycle.Models.SubCateViewModel' with a collection initializer because it does not implement 'System.Collections.IEnumerable'
    • SubCateViewModel 您的数据库表或用户生成的模型
    • 这是用户生成的模型@Nilesh
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 2015-06-12
    • 1970-01-01
    • 2011-05-14
    • 2013-05-15
    相关资源
    最近更新 更多