我有一個單一的MongoDB集合持有三種不同的類別(A,B,C),這都來自一個共同的D類放大器使用C#MongoDB的LINQ與鑑別
根據官方的C#驅動程序繼承的文件,我已經插入所有三種類型的文件(A,B,C),它們全部使用_t鑑別符正確顯示,並且在我的代碼中他們的類地圖被註冊。
如果我發出了一個LINQ查詢,如下所示(採用VB):
dim Result = database.GetCollection("mycol").AsQueryable(Of C).Where(some where clause)
如果我算的這個結果,我得到一個錯誤「元素‘從A類元素名稱’呢不符合C類的任何領域或財產。「
是不是在這裏AsQueryable(Of C)
代碼踢在這裏的鑑別?看來,當我發出.Count
我Where條款,這是特定於C類元素,正在應用於文件的A,B和C.
我已經嘗試添加.OfType(Of C)
沒有任何效果,嘗試轉換爲一個列表第一個.ToList
,但我繼續得到相同的錯誤。有任何想法嗎?
作爲背景,我的客戶端代碼通常會處理類型D的對象.A,B,C共享很多從D繼承的常用屬性,我希望將索引放在上面,因此我將它們放在一個集合中。但偶爾我需要在特殊情況下直接引用類型A,B或C的對象。
克雷格您好,感謝這麼多的快速答覆。很遺憾沒有區別。正如我在原來的帖子中提到的那樣,我曾嘗試過,但它似乎沒有改變任何東西。是否有驅動程序隨附的診斷程序,例如是否有可能看到底層查詢?就像你可以用一個查詢對象(即Query.ToString) – 2012-07-22 03:21:19
我也嘗試了'AsQueryable()。OfType(Of C)'而不是'AsQueryable(Of C).OfType(Of C)'並且得到了「No強制運算符定義在類型'MongoDB.Bson.BsonDocument'和'C'之間' – 2012-07-22 03:26:47
還有一點評論:)我詢問診斷的原因是我可以使用IMongoQuery發出幾乎相同的命令,並且得到正確的結果。我試圖使用泛型爲我的非MongoDB意識類組成一個通用查詢方法,因此LINQ適合這個賬單。 – 2012-07-22 03:30:38