2011-03-27 73 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); 

因此,由於返回類型是不同的,你不能分配的結果分組回到原來的變量。