2016-11-22 51 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()和。而(),但它探索你会发现一个经济实惠的名单,以帮助你