2011-07-14 50 views
1

我對此有這樣的價值觀LINQ到SQL古怪

AAAA 
BBBB0001 
BBBB0002 
CCCC 
CCCC 
CCCC 

字段的數據庫表,我想知道有多少AAAAs,BBBBs和CCCCs有(1,2和3這裏) 。

如果我在一個陣列設置了幾個測試查詢的LinqPad使用這些值:

var Table = new [] {"AAAA", "BBBB1", "BBBB2", "CCCC", "CCCC", "CCCC"}; 

var query1 = Table.GroupBy(d => d).Select(g => new { K = g.Key, C = g.Count()}); 
query1.Dump(); 

var query2 = Table.GroupBy(d => d.Substring(0, 4)).Select(g => new { K = g.Key, C = g.Count()}); 
query2.Dump(); 

然後我得到我所期望的結果 - 通過密鑰和第二分組分組第一案按鍵的前四個字符

AAAA 1 
BBBB1 1 
BBBB2 1 
CCCC 3 

AAAA 1 
BBBB 2 
CCCC 3 

這很好。但是,如果通過一個SQLite表更換陣列並運行相同的查詢,我所得到的是

AAAA 1 
BBBB1 1 
BBBB2 1 
CCCC 3 

AAAA 1 
BBBB 1 
BBBB 1 
CCCC 3 

也就是說,第一個是正確的,而在第二,本場被正確地縮短,但分組是錯誤的。

有人對此有所瞭解嗎?

Andrew

+0

SQLite不是LINQ to SQL,是嗎?這聽起來像一個,但在LINQ to SQLite提供者。我建議你看看生成的SQL ... –

+0

SQLite生成的SQL最有可能不正確。可能在關鍵截斷之前完成分組。你可以發佈正在生成的內容嗎? – dlev

+0

謝謝兩個 - 它確實是一個錯誤 - 添加一個AsEnumerable()並強制組在本地完成是一個修復。 – amaca

回答

0

你用什麼連接器將你的linq連接到sqlite?感覺這可能是該連接器中的一個錯誤。

例如查看dotconnect的修訂表 - http://www.devart.com/dotconnect/sqlite/revision_history.html - 那麼最近幾個月他們發現並修復了很多bug,我相信其中可能會有其他人。


除非你絕對需要sqlite的,那麼你可以考慮切換到SQL CE - 在這種情況下,你會得到對LINQ來自微軟更直接的支持。

+0

謝謝斯圖爾特 - 我被迫在這種情況下使用Sqlite。 – amaca