我在應用程序中有以下LINQ查詢。數據源是爲了測試目的在內存中構建的List<Borehole>
。在針對SQLite數據庫的LINQPad查詢中發生InvalidOperationException
var lq = from p in data
group p by p.CostCenter into g
select new { CostCenter = g.Key,
AverageDepth = g.Average(p => p.OriginalDepth),
NullDepthCount = g.Count(p => p.OriginalDepth == null) };
它運行完美,並給出所需的選擇結果。然而,當我在LINQPad運行下面的查詢,它導致InvalidOperationException
:
var lq = from p in Boreholes
group p by p.CostCenter into g
select new { CostCenter = g.Key,
AverageDepth = g.Average(p => p.OriginalDepth),
NullDepthCount = g.Count(p => p.OriginalDepth == null) };
這裏的數據源是使用IQ 2.0.5.0 LINQPad司機在一個SQLite數據庫中的表,掛LINQPad。該錯誤信息是:
No generic method 'Where' on type 'System.Linq.Queryable' is compatible with the supplied type arguments and arguments. No type arguments should be provided if the method is non-generic.
我使用LINQPad v4.42.01
。應用程序示例編譯爲.NET Framework 4 Client Profile
。
該OriginalDepth
屬性類型double?
。
爲什麼我的查詢不能在LINQPad中工作/爲什麼它在我的應用程序中工作?
我該如何解決LINQPad查詢問題?
UPDATE
如果我複製和粘貼我的應用程序代碼,包括虛擬Borehole
類的定義和虛擬data
列表的創建,爲LINQPad,它工作正常。因此問題不在於LINQPad拒絕適用於應用程序的查詢格式。
問題就變成:爲什麼我一個List<Borehole>
對象使用g.Count(p => p.OriginalDepth == null)
,但是當我做對LINQPad訪問的SQLite表相同的查詢,我得到InvalidOperationException
如上所述?
更新2
不要緊用於查詢的g.count
部分謂語是什麼。在同樣的錯誤,當對SQLite數據庫表執行以下結果:
var lq2 = from p in Boreholes
group p by p.CostCenter into g
select new { NullDepthCount = g.Count(p => true)};
你確定數據(查詢1)== Boreholes(查詢2)? – hyp 2012-07-11 15:50:53
不,它們不一樣,只是一個手動創建對象的假人,另一個是實際的SQLite數據庫內容,因此這些類由LINQPad自動創建。問題是爲什麼操作被允許在'List'上,而不是在LINQPad訪問的表上。 –
2012-07-11 15:56:58