2012-06-13 29 views
1

MongoDB中,我可以通過一個謂詞的可查詢的實例例如MongoDB的傳球謂詞參數

DataBase.GetCollection<BsonDocument>("entity") 
    .AsQueryable<Entity>() 
    .Where(item=>item.id ==5); 

但現在我有這樣

IEnumerbale QueryData(Predicate<Entity> condition) 
{ 
    this.DataBase.GetCollection<BsonDocument>("entity") 
     .AsQueryable<Entity>() 
     .Where(item=> condition(item)); 
} 

功能,但是,這並不工作,並告訴我:

不支持where子句:。

這是按照設計? 有沒有解決方法?難道我做錯了什麼?

回答

4

你甚至不傳遞一個表達式。你的條件對MongoDB來說是一個完全不透明的函數。

您需要在Expression<Func<Entity,bool>>通過,並呼籲在哪裏這樣的:

Where(condition) 
+1

噢,就是這樣。非常感謝 ! –

2

Where子句必須轉換爲發送到服務器的MongoDB查詢。當你傳入一個任意的謂詞時,LINQ層不知道要翻譯它到什麼地方。所以這種類型的開放式Where子句不能被支持。

+0

你有這個翻譯的例子嗎? –