Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#条件$match_C#_Mongodb - Fatal编程技术网

C#条件$match

C#条件$match,c#,mongodb,C#,Mongodb,我在C#中有以下代码以匹配字段: var match = new BsonDocument { { "$match", new BsonDocument { { "Country", paramsEntity.Country }, { "Company_ID", String.IsNullOrEmpty(paramsEntity.CompanyID) ? "$Co

我在C#中有以下代码以匹配字段:

var match = new BsonDocument
{
    { 
        "$match",
        new BsonDocument 
            { 
                { "Country", paramsEntity.Country },
                { "Company_ID", String.IsNullOrEmpty(paramsEntity.CompanyID) ? "$Company_ID" : paramsEntity.CompanyID },
                { "Staff_ID", String.IsNullOrEmpty(paramsEntity.StaffID) ? "$Staff_ID" : paramsEntity.StaffID }
            }
    }
};

它什么也没给我。但当我从$match中取出Company_ID时,它会给出结果。我的公司ID筛选有问题吗?

可能有更好的方法,但您可以:

var query = collection.AsQueryable().Where(e => e.Country == paramsEntity.Country);
if (!string.IsNullOrEmpty(paramsEntity.CompanyId))
{
    query = query.Where(e => e.CompanyId == paramsEntity.CompanyId);
}
if (!string.IsNullOrEmpty(paramsEntity.StaffId))
{
    query = query.Where(e => e.StaffId == paramsEntity.StaffId);
}
它使用IQueryable接口,并在查询中附加过滤器(如果已指定)

或者,您可以这样做:

var filterBuilder = Builders<yourObjectType>.Filter;
var filters = new List<FilterDefinition<yourObjectType>>();
filters.Add(filterBuilder.Eq(o => o.Country, paramsEntity.Country));
if (!string.IsNullOrEmpty(paramsEntity.CompanyId))
{
    filters.Add(filterBuilder.Eq(o => o.CompanyId, paramsEntity.CompanyId));
}
if (!string.IsNullOrEmpty(paramsEntity.StaffId))
{
    filters.Add(filterBuilder.Eq(o => o.StaffId, paramsEntity.StaffId));
}
var dataCursor = collection.Find(filterBuilder.And(filters));
var filterBuilder=Builders.Filter;
var filters=新列表();
添加(filterBuilder.Eq(o=>o.Country,paramentity.Country));
如果(!string.IsNullOrEmpty(paramentity.CompanyId))
{
Add(filterBuilder.Eq(o=>o.CompanyId,paramentity.CompanyId));
}
如果(!string.IsNullOrEmpty(paramentity.StaffId))
{
Add(filterBuilder.Eq(o=>o.StaffId,paramentity.StaffId));
}
var dataCursor=collection.Find(filterBuilder.And(filters));

它编译一个条件列表,然后将它们相加以产生结果。

这是我的另一种方法。希望与大家分享:

            dynamic param = new JObject();

            if (!String.IsNullOrEmpty(paramsEntity.Country))
            {
                param.Country = paramsEntity.Country;
            }

            if (!String.IsNullOrEmpty(paramsEntity.CompanyID))
            {
                param.Company_ID = paramsEntity.CompanyID;
            }

            if (!String.IsNullOrEmpty(paramsEntity.StaffID))
            {
                param.Staff_ID = paramsEntity.StaffID;
            }

            if (!String.IsNullOrEmpty(paramsEntity.BranchID))
            {
                param.Branch_ID = paramsEntity.BranchID;
            }

            var match = new BsonDocument
            {
                { "$match",
                    new BsonDocument { BsonSerializer.Deserialize<BsonDocument>(JsonConvert.SerializeObject(param))
                }
            };
dynamic param=new JObject();
如果(!String.IsNullOrEmpty(paramentity.Country))
{
参数国家=参数国家;
}
如果(!String.IsNullOrEmpty(paramentity.CompanyID))
{
param.Company_ID=paramentity.CompanyID;
}
如果(!String.IsNullOrEmpty(paramentity.StaffID))
{
param.Staff_ID=paramsEntity.StaffID;
}
如果(!String.IsNullOrEmpty(paramentity.BranchID))
{
param.Branch_ID=paramsEntity.BranchID;
}
var匹配=新的BsonDocument
{
{“$match”,
新BsonDocument{BsonSerializer.Deserialize(JsonConvert.SerializeObject(param))
}
};

这是一个更大的查询的一部分,还是您将其用作带有可选部分的筛选器?是的,有问题。您实际上想在这里做什么?您基本上是想确定您是否定义了输入参数,然后将其作为条件传递给字段,还是根本没有条件传递给字段?是..我正在尝试确定是否存在输入参数。您的基本误解是,您试图在筛选条件的“右侧”部分访问文档的现有字段(如
“字段”:“existingfield”
)MongoDB根本不支持它。@dnickless Mongo实际上使用$where操作符支持它。虽然效率低下,但它是受支持的。例如:
{$where:“this.a