【问题标题】:Cannot convert IQueryable<Grouping> to IQueryable<Model>无法将 IQueryable<Grouping> 转换为 IQueryable<Model>
【发布时间】:2015-09-11 09:13:16
【问题描述】:

我被这个问题困住了。我正在尝试返回我的模型(组)的 IQueryable 列表。然后我将返回一个视图并显示在一个下拉框中。我让它工作。但是,当我添加 GroupBy 时,我收到以下错误:

Error   2   Cannot implicitly convert type 'System.Linq.IQueryable<System.Linq.IGrouping<int,Entities.Group>>' to 'System.Linq.IQueryable<Entities.Group>'. An explicit conversion exists (are you missing a cast?) 

控制器:

model.ClaimGroups = supplierGroupRepo.GetAllSupplierClaimGroupsByClient(model.ClientID)
                                     .OrderBy( r=> r.GroupName)
                                     .GroupBy( r=> r.GroupID);

LINQ:

public class SQLSupplierGroupRepository : ISupplierGroupRepository {
        ApplicationDbContext Db = new ApplicationDbContext();

        public IQueryable<Group> GetAllSupplierClaimGroupsByClient(int ClientID) {
            return (from sg in Db.Group
                     where sg.ClientID == ClientID
                     select sg);
        }

        public void Dispose() {
            if (camOnlineDb != null) {
                camOnlineDb.Dispose();
            }
        }
    }

我知道我可以在控制器或 LINQ 语句中进行排序。但是,我尝试了这个,OrderBy 似乎对结果没有影响。

编辑:

我在 LINQ 中尝试过,这似乎对结果的顺序没有影响:

public IQueryable<Group> GetAllSupplierClaimGroupsByClient(int ClientID) {
            var x =  (from sg in Db.Group
                     where sg.ClientID == ClientID
                     select sg);

            x.OrderBy(r => r.GroupName);
            x.GroupBy(r => r.GroupID);
            x.Select(g => new Group {
                GroupID = g.GroupID,
                GroupName = g.GroupName
            });


            return x;
        }

【问题讨论】:

  • 您需要使用Select 投影您的输出以返回IQueryable&lt;Entities.Group&gt;。目前它正在返回IQueryable&lt;IGrouping&lt;int,Entities.Group&lt;TKey,T&gt;
  • 我确实只是尝试过,但它没有用。我会添加一个编辑给你看
  • 根据您的编辑,首先您不能这样做:GroupID = g.GroupID 而您需要这样做 GroupID = g.Key。其次,为了获取GroupName,您需要从每个组中指定您需要的组名,因为g 将在每个组ID 下包含GroupName 的列表。除此之外,为什么要混合查询和方法语法?您可以通过链接不同的方法来完成所有这些操作。

标签: c# linq


【解决方案1】:

我不得不向一位同事寻求帮助,我的问题有两个。但我只问了一个问题。结果如下:

 public IEnumerable<GroupModel> GetAllSupplierClaimGroupsByClientGrouping(int ClientID) {

            var x = (from g in camOnlineDb.Group
                     where g.ClientID == 1
                     group g by new { GroupID = g.GroupID, GroupName = g.GroupName }
                         into a
                         select new GroupModel{ GroupID = a.Key.GroupID, GroupName = a.Key.GroupName });
            return x.OrderBy( r=> r.GroupName);
        }

【讨论】:

  • 如果您看到我的最后一条评论,这正是我建议您的内容:) 根据分组键投影您的模型。
  • 我注意到了。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
  • 2017-11-16
  • 1970-01-01
  • 2010-12-01
  • 2010-12-16
  • 1970-01-01
相关资源
最近更新 更多