2011-03-27 142 views
0

我需要根据表中的月份对表格进行分组。GroupBy在LINQ

的查询会是这样的:

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? into IQueryable

+0

会发生什么?你有错误还是不行? – Tridus 2011-03-27 11:51:10

+0

代码中的哪个点会出现错误? – CarneyCode 2011-03-27 11:54:56

+0

我希望这个例子可以帮助 2011-12-22 03:40:49

回答

1

你可以这样做:因为var query是隐式地从它的使用推断

var query2 = query.GroupBy(x => x.Month); 
Grid1.DataSource = query2; 
Grid1.DataBind(); 

的问题引起的。 queryIQueryable<SomeAnonymousType>类型,而GroupBy方法返回IQueryable<IGrouping<int?, SomeAnonymousType>>。这些只是两种不同的类型。

+0

如果我这样做,我得到这个错误:“一个字段或财产与在所选数据源上找不到名称'Key'。“ – Sayamima 2011-03-27 12:01:55

+0

@Nishanth:但在这种情况下,您不会收到C#编译器错误,是吗?这个新的错误是由ASP.NET GridView控件引发的。 – Steven 2011-03-27 12:06:13

+0

是的,它被网格抛出 – Sayamima 2011-03-27 12:09:42

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); 

因此,由于返回类型是不同的,你不能分配的结果分组回到原来的变量。