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