2016-11-22 25 views
1

我有HTML格式的記錄和屬性的許多過濾選項的表。用戶可以選擇無,一個或多個。我在C#中使用mongoDb數據庫和MongoDb驅動程序。我如何才能實現這種過濾?在MongoDB中的乘法過濾

過濾

public class ConsultantFiltersModel 
{ 
    public string RecruiterName { get; set; } 
    public int? RecruiterCode { get; set; } 
    public bool? WithouRecruiter { get; set; } 
    public string FutureWorkerName { get; set; } 
    public string PhoneNumber { get; set; } 
} 

我通過從客戶端該過濾器,一些屬性是Nullable。我只需要通過非空屬性篩選記錄。

我試着去實現它這樣

public Consultant FilterRecords(ConsultantFiltersModel consultantFiltersModel) 
{   
    return consultantsCollection 
     .AsQueryable() 
     .Where(recruiterNameFilter => 
     string.IsNullOrEmpty(consultantFiltersModel.RecruiterName) 
     ? true 
     : recruiterNameFilter.Recruiter.Value == consultantFiltersModel.RecruiterName) 

     .Where(recruiterCodeFilter => 
     consultantFiltersModel.RecruiterCode.HasValue 
     ? true 
     : recruiterCodeFilter.Recruiter.Key == consultantFiltersModel.RecruiterCode) 

     .Where(phoneNumberFilter => 
     string.IsNullOrEmpty(consultantFiltersModel.PhoneNumber) 
     ? true 
     : phoneNumberFilter.FutureWorker.Phone.Contains(consultantFiltersModel.PhoneNumber)) 

     .Where(futureWorkerNameFilter => 
     string.IsNullOrEmpty(consultantFiltersModel.FutureWorkerName) 
     ? true 
     : futureWorkerNameFilter.FutureWorker.Name.Contains(consultantFiltersModel.FutureWorkerName)) 

     .FirstOrDefault();    
} 

,但我得到這個例外

型 'System.Reflection.TargetException' 的異常出現在
系統。 Private.CoreLib.ni.dll但未在用戶代碼中處理
附加信息:非靜態方法需要目標。

也許它不支持mongoDbDriver?任何建議?

回答

1

使用本地mongodb Find()直接使用Lambda或使用Builders創建過濾器可能會有更好的運氣。他們可能會更容易建立動態比上述

var builder = Builders<YourObject>.Filter; 
var filter = builder.Eq(x => x.YourField, "SomeValue"); 
var andFilter = builder.And(filter, builder.Eq(x => .SomeOtherField, "SomeOtherValue")); 
var results = consultantsCollection.Find(andFilter).FirstOrDefault(); 

建築工地查詢有許多爲您篩選的擴展方法,如上圖所示,我使用.EQ()和。而(),但它探索你會發現一個經濟實惠的名單,以幫助你