【问题标题】:How do I return a LinQ GroupBy如何返回 LinQ GroupBy
【发布时间】:2015-01-07 10:42:27
【问题描述】:

当我按类别返回列表产品组时出现错误:

错误 1 ​​无法将类型“System.Linq.IQueryable>”隐式转换为“System.Linq.IQueryable”。存在显式转换(您是否缺少演员表?)

我的代码:

public IQueryable<GroupModel> GetAll()
    {
        List<Category> listCategories = new List<Category>
        {
            new Category {Id = 1, CateName = "SmartPhone", Description = "aaaaaa"},
            new Category {Id = 2, CateName = "Laptop", Description = "bbbb"},
            new Category {Id = 3, CateName = "Desktop", Description = "ccccc"},
        };

        List<Product> listProducts = new List<Product>
        {
            new Product {Id = 1, ProdName = "Lumia 720", CategoryId = 1, ColorId = 2},
            new Product {Id = 2, ProdName = "PC HP", CategoryId = 3, ColorId = 1},
            new Product {Id = 3, ProdName = "PC Dell", CategoryId = 3, ColorId = 1},
            new Product {Id = 4, ProdName = "Laptop Lenovo", CategoryId = 2, ColorId = 2},
            new Product {Id = 5, ProdName = "Lumia 920", CategoryId = 1, ColorId = 2},
            new Product {Id = 6, ProdName = "Laptop Dell", CategoryId = 2, ColorId = 3},
            new Product {Id = 7, ProdName = "Laptop HP", CategoryId = 2, ColorId = 3},
            new Product {Id = 7, ProdName = "Lumia 1020", CategoryId = 1, ColorId = 1}
        };

        List<Color> listColors = new List<Color>
        {
            new Color {ColorId = 1, ColorName = "Blue"},
            new Color {ColorId = 2, ColorName = "Yellow"},
            new Color {ColorId = 3, ColorName = "Red"}
        };

        var query = (from p in listProducts
                     join co in listColors on p.ColorId equals co.ColorId
                     join c in listCategories on p.CategoryId equals c.Id into e
                     from j in e.DefaultIfEmpty()

                     select new GroupModel
                     {
                         CategoryId = j.Id,
                         CategoryName = j.CateName,
                         ProductId = p.Id,
                         ProductName = p.ProdName,
                         ColorId = co.ColorId,
                         ColorName = co.ColorName

                     }).ToList().GroupBy(x => x.CategoryName);



        return query.AsQueryable();
    }

【问题讨论】:

  • 不同之处在于它们是两种不同的类型:IQueryable 和 IQueryable。我想这是你必须提出的问题。 AFAIK 是 IQueryable 类似于 IQueryable

标签: asp.net-mvc linq group-by


【解决方案1】:

您的 linq 查询正在返回 IGrouping&lt;string,GroupViewModel&gt; 而不是 IQueryable&lt;GroupViewModel&gt;。将您的方法签名更改为:

public IQueryable<IGrouping<string,GroupViewModel>> GetAll()
{
 var query = (from p in listProducts
             .......................
             .......................
 return query.AsQueryable<IGrouping<string,GroupViewModel>>();

}

DEMO FIDDDLE

【讨论】:

    【解决方案2】:

    尝试以下作为最后一条语句

    return query.SelectMany(x=>x).AsQueryable();
    

    【讨论】:

      猜你喜欢
      • 2016-08-18
      • 1970-01-01
      • 1970-01-01
      • 2022-12-17
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      相关资源
      最近更新 更多