我有一个首先使用实体框架代码的 Web 应用程序,我希望能够将下面的示例数据连接到 ASP.NET 中的各种实体数据感知控件。
通过使用控件的 ItemType 属性来指定我的自定义封装类和控件的 SelectMethod 属性来调用 LINQ 查询,我需要返回一个 IQueryable 集合,控件可以使用该集合并使用自动分页等。
让我们假设我们有一个实体开始:-
public class MyEntity
{
[Key]
public int MyObjectId { get; set; }
public string Name { get; set;}
}
所以这个 LINQ 查询可以正常工作
public IQueryable<MyObject> GetMyObjects()
{
SiteContext db = new SiteContext();
var myObjects = (from m in db.MyObjects
select m);
return myObjects;
}
现在使用以下示例数据:-
MyObjectId Name
1 Apple
2 Orange
3 Apple
4 Apple
5 Pear
6 Orange
7 Apple
8 Grapes
9 Apple
10 Orange
我想要做的是将数据分组并提供如下计数:-
Name Count
Apple 5
Orange 3
Pear 1
Grapes 1
所以我的第一步是创建一个类来封装实体并提供额外的计数列:-
public class MyObjectWithCount
{
public MyObject MyObject { get; set; }
public int Count { get; set; }
}
现在我想通过 LINQ 查询获得一些结果
public IQueryable<MyObjectWithCount> GetMyObjectsWithCount()
{
SiteContext db = new SiteContext();
var myObjects = (from m in db.MyObjects
group m by m.Name into grouped
select new MyObjectWithCount()
{
MyObject = grouped,
Count = ?what goes here?
});
return myObjects;
}
所以我的 select new MyObjectWithCount() 有两个问题
1)如何获得每个分组项目的计数
2) 如何将分组转换为 Myobject。就目前而言,我得到无法将类型 system.linq.grouping 隐式转换为 MyObject 的设计时错误。
如果我没有在 LINQ 查询中执行分组,那么我能够成功地将 IQueryable 返回给我的控件,并且一切都很好(但显然在这个阶段缺少计数)
还要澄清一下,这是我的实体/类的一个过于简单的示例,我确实需要访问完整的 MyObject 实体,因为在现实世界中会有很多字段,而不仅仅是上面示例中的名称字段。
感谢大家提供的任何帮助