2016-11-22 4 views
1

У меня есть таблица с записями в HTML и многие параметры фильтрации по свойствам. Пользователь может выбрать один, один или несколько. Я использую базу данных mongoDb и драйвер MongoDb в C#. Как я могу реализовать эту фильтрацию?Умножьте фильтрацию в 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() и .и(), но исследовать его и вы найдете полезный список, который поможет вам

Смежные вопросы