使用and或运算符的Mongodb c#过滤器
我在使用and或运算符的Mongodb c#过滤器,c#,asp.net-mvc,mongodb,linq,filter,C#,Asp.net Mvc,Mongodb,Linq,Filter,我在mongodb 样本 { "SchemaName": "Intelligence", "SchemaDescription": "WindPower", "SchemaType": "WindPower", "SchemaTypeId": 1, "SchemaData": { "ProjectId": 1, "LastUpdated": "2016-07-02T19:27:28.000+0000", "ProjectName": "Zhonghuashan II",
mongodb
样本
{
"SchemaName": "Intelligence",
"SchemaDescription": "WindPower",
"SchemaType": "WindPower",
"SchemaTypeId": 1,
"SchemaData": {
"ProjectId": 1,
"LastUpdated": "2016-07-02T19:27:28.000+0000",
"ProjectName": "Zhonghuashan II",
"Capacity": 49.0,
"Technology": "Onshore",
"Country":{
"CountryId":1,
"CountryName":"UnitedKingdom",
"CountryCode":"UK"
}
}
}
现在我根据搜索条件过滤数据
var filter = Builders<Schema>.Filter.Or(
Builders<Schema>.Filter.Where(p => p.SchemaData.ProjectName.ToLower().Contains(searchCriteria.ProjectName.ToLower())),
Builders<Schema>.Filter.Where(p => p.SchemaData.Technology.ToLower().Contains(searchCriteria.Technology.ToLower())),
Builders<Schema>.Filter.Where(p => p.SchemaData.Country.CountryName.ToLower().Contains(searchCriteria.Country.ToLower()))
);
var list = await collectionHandler.ReadOnly<Schema>().FindSync(filter).ToListAsync();
return list;
var filter=Builders.filter.Or(
其中(p=>p.SchemaData.ProjectName.ToLower().Contains(searchCriteria.ProjectName.ToLower()),
Builders.Filter.Where(p=>p.SchemaData.Technology.ToLower().Contains(searchCriteria.Technology.ToLower()),
Builders.Filter.Where(p=>p.SchemaData.Country.CountryName.ToLower().Contains(searchCriteria.Country.ToLower())
);
var list=await collectionHandler.ReadOnly().FindSync(filter.ToListAsync();
退货清单;
我需要添加条件
searchCriteria.ProjectName=”“||searchCriteria.Technology=“||searchCriteria.Country=”“=返回所有记录
searchCriteria.ProjectName=“abc”和searchCriteria.Technology=“xyz”| | searchCriteria.Country=”“=返回匹配的记录
searchCriteria.ProjectName=“abc”和searchCriteria.Technology=“xyz”和searchCriteria.Country=“pqr”=返回匹配的记录
searchCriteria.ProjectName=“| | searchCriteria.Technology=“xyz”和searchCriteria.Country=“pqr”=返回匹配的记录
searchCriteria.Technology=”“=“abc”| | searchCriteria.Technology=“xyz”和searchCriteria.Country=“pqr”=返回匹配的记录
假设搜索条件的任何属性都可以与搜索条件的其他属性结合使用and and or对于我来说,直接将过滤器作为字符串传递是很舒服的:
FilterDefinition<BsonDocument> filter = @"{ ""Prop"": { $Or: [{ $and: [...] },{ $and: [...] }] } }";
var lst = collection.Find(filter);
filterDefinitionFilter=@“{”“Prop”“:{$Or:[{$and:[…]},{$and:[…]}]}”;
var lst=collection.Find(过滤器);
您可以查看文档:我是这样做的: 以这个答案为基础
var idFilter = new BsonDocument { { "_id", new BsonDocument { { "$regex", codeRegex }, { "$options", "i" } } } };
var nameFilter = new BsonDocument { { "Name", new BsonDocument { { "$regex", codeRegex }, { "$options", "i" } } } };
var filter = new BsonDocument("$or", new BsonArray { idFilter, nameFilter });
var query = _collection.Find(filter)
.SortBy(c=>c.Id);
return query.ToList();