我需要根据表中的Month对表进行分组。
查询就是这样:
var query =
from a in db.Dates
from b in db.Facts
where a.Count_Key == b.Date_key
select new
{
a.Month,
b.Fact_key
};
从这个查询我尝试按月分组
query = query.GroupBy(x => x.Month);
Grid1.DataSource = query;
Grid1.DataBind();
然后我收到以下错误:
无法隐式转换IGrouping int?进入IQueryable
答案 0 :(得分:1)
您无法重新分配回查询变量,因为这两个查询的结果是不同的类型。
您的第一个查询基本上是这样的:
IQueryable<'a> query =
from a in db.Dates
from b in db.Facts
where a.Count_Key == b.Date_key
select new
{
a.Month,
b.Fact_key
};
即。它返回匿名类型的直接IQueryable
。
您的第二个查询会返回IQueryable<IGrouping<'a>>
,即匿名类型组的IQueryable
:
IQueryable<IGrouping<'a>> groupedQuery = query.GroupBy(x => x.Month);
因此,由于返回类型不同,您无法将分组结果分配回原始变量。
答案 1 :(得分:1)
你可以这样做:
var query2 = query.GroupBy(x => x.Month);
Grid1.DataSource = query2;
Grid1.DataBind();
问题是由于var query
从其使用中隐式推断而引起的。 query
类型为IQueryable<SomeAnonymousType>
,GroupBy
方法返回IQueryable<IGrouping<int?, SomeAnonymousType>>
。这些只是两种不同的类型。