2016-11-22 24 views
1

私はHTML形式のレコードを持つテーブルと、プロパティ別の多くのフィルタリングオプションを持っています。ユーザーは、none、one、またはmoreを選択できます。私は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です。私は非nullプロパティだけでレコードをフィルタリングする必要があります。

私はこの

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を直接使うか、ビルダーを使ってフィルターを作成すると良いでしょう。彼らは、上記の、私は.EQ()と.ANDを()を使用しています示すように、

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(); 

ビルダー上記のクエリよりも、動的に構築し、あなたのフィルタリングのための拡張メソッドの数を持つことが容易になり、それを探るかもしれませんあなたを助けるためにあなたは徹底的なリストを見つけるでしょう

関連する問題