我的表中包含HTML中的记录和许多按属性的过滤选项。用户可以选择一个,一个或多个。我在C#中使用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'的例外情况发生在 System.Private.CoreLib.ni.dll但未在用户代码中处理
附加信息:非静态方法需要目标。
也许mongoDbDriver不支持它?有什么建议吗?
答案 0 :(得分: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()和.And(),但是要探索它,你会找到一个可以帮助你的密集列表