2011-03-02 45 views
0

我有一些奇怪的情況與一些不會產生我期望的響應的LINQ。LINQ GroupBy子句可以包含一個操作嗎?

在我所希望的方式以下組(兩組:一爲奇數,一個是偶數):

var ints = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 

var foo = from i in ints 
    group i by i % 2 into g 
    select new { 
     Key = g.Key, 
     Group = g 
    }; 

當我做類似如下的查詢MySQL數據庫(使用IQ驅動程序),它會導致一些完全不直觀的情況:數據庫中每個條目都有一個單獨的「組」。

var bar = from f in MYDATABASE_TABLE.Take(10) 
    group f by f.Uid % 2 into g // where Uid is an int 
    select new { 
     Key = g.Key, 
     Group = g 
    }; 

有沒有人有任何想法,爲什麼這表現如此奇怪?如果我爲其添加任何類型的操作,GroupBy子句似乎表現得很奇怪。 (例如,您可以嘗試使用隨機數生成器來生成0和1(例如,用random.Next(1)替換「f.Uid%2」子句),並且它做類似的事情。)

編輯:Took對「linq-to-sql」的引用不正確,並且增加了對IQ Driver的明確引用。

+3

Linq-to-SQL ...在MySQL上? – 2011-03-02 21:46:14

+0

是的,在MySQL上(對不起 - 不知道這會有所作爲)。 – 2011-03-02 21:48:23

+0

@Tony,問這個問題是因爲LinqToSql不支持MySQL。 – 2011-03-02 21:49:57

回答

0

試試這個(未經測試,但我已經做了類似的東西):

var bar = from f in MYDATABASE_TABLE.Take(10) 
    let u = f.Uid % 2 
    group f by u into g // where Uid is an int 
    select new { 
     Key = g.Key, 
     Group = g 
    }; 

我可能是錯誤的這一點,但它應該是很容易去嘗試。

+0

好主意。我剛剛通過LINQPad嘗試了這一點,不幸的是,它仍然產生了奇怪的反應。我的猜測是,它將「by」和「into」之間的句子當作「讓我們稍後評估它」來處理,但對於內部的工作方式我沒有很好的理解。 – 2011-03-02 21:50:35

+0

@Tony - 是的,let子句應該只是語法糖,所以我認爲這是一個很長的鏡頭。我知道我以前做過這個。我會看看我能否找到我的舊代碼。 – 2011-03-02 22:04:37

+0

根據其他人的回答,你是否記得/知道你的代碼是針對哪個數據庫運行的? – 2011-03-02 22:14:31

相關問題