Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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
MongoDB C#驱动程序->;检查字符串是否包含(字符串)列表中的元素_C#_Mongodb - Fatal编程技术网

MongoDB C#驱动程序->;检查字符串是否包含(字符串)列表中的元素

MongoDB C#驱动程序->;检查字符串是否包含(字符串)列表中的元素,c#,mongodb,C#,Mongodb,我正在尝试实现非常简单的算法。 假设我们有一些简单的层次结构: (根)A=>B=>C 每个nove代表一些ID,每个ID包含许多记录 记录如下: (字符串)Id和(列表)ExcludedId 因此,我们可以: rec1:{Id:A;ExcludedId=[B]} 记录2:{Id:A;ExcludedId=[D]} 记录3:{Id:A;ExcludedId=[B]} rec1':{Id:A;ExcludedId=[]} rec1:{Id:C;ExcludedId=[]} rec2':{Id:D;E

我正在尝试实现非常简单的算法。 假设我们有一些简单的层次结构: (根)A=>B=>C 每个nove代表一些ID,每个ID包含许多记录

记录如下: (字符串)Id和(列表)ExcludedId

因此,我们可以:

rec1:{Id:A;ExcludedId=[B]}

记录2:{Id:A;ExcludedId=[D]}

记录3:{Id:A;ExcludedId=[B]}

rec1':{Id:A;ExcludedId=[]}

rec1:{Id:C;ExcludedId=[]}

rec2':{Id:D;ExcludedId=[]}

现在算法看起来像:

如果我想从C获取记录,我需要获取: C、 B,A存在于Id和 C、 B,A不存在于ExcludedId中

于是我写道:

public List<Record> GetRecords(string id, List<string> parentId)
{
    if (parentsIds == null)
            parentsIds = new List<string>();

    var collection = _mongoDbConnection.GetCollection<Records>();

    var allScenarios = parentsIds.ToList();
    allScenarios.Add(Id);

    var myfilter = Builders<Record>.Filter.And(
            Builders<Record>.Filter.Where(record => allScenarios.Any(s => record.Id.Contains(s))),
            Builders<Record>.Filter.Not(Builders<Record>.Filter.Where(record => allScenarios.Any(s => record.ExcludedIds.Contains(s))))
        );

return collection.Find(myfilter).ToList();
}
你能帮我吗?先谢谢你

编辑:

更改:

Builders<Record>.Filter.Where(record => allScenarios.Any(s => record.Id.Contains(s))
Builders.Filter.Where(record=>allScenarios.Any(s=>record.Id.Contains))

Builders.Filter.In(ts=>ts.ScenarioGuid,parentScenarioGuids),
这是可行的!但我对

Builders<Record>.Filter.Not(Builders<Record>.Filter.Where(record => allScenarios.Any(s => record.ExcludedIds.Contains(s))))
        );
Builders.Filter.Not(Builders.Filter.Where(record=>allScenarios.Any(s=>record.ExcludedIds.Contains)))
);
因为ExcludedIds是列表。因此:

Builders<Record>.Filter.Nin(ts => ts.ExcludedScenarioGuids, allScenarios)
Builders.Filter.Nin(ts=>ts.ExcludedScenarioGuids,所有场景)

无法将lambda表达式转换为类型FieldDefinition,因为它不是委托类型。
异常指向ts=>ts.ExcludedScenarioGuids

编辑2:


如@cloudikka所写,解决方案是AnyIn和In。感谢您可能希望使用
In
方法而不是
Where
方法。或者,
Nin
方法。这两种方法都可以用于单值字段。此外,对于数组字段,还有
AnyIn
和相反的
AnyIn

相关资料来源:


您可能希望在方法中使用
,而不是
Where
方法。或者,
Nin
方法。这两种方法都可以用于单个值字段。对于数组字段,还有
AnyIn
和相反的
AnyNin

相关资料来源:


谢谢!部分解决了我的问题。但我在问题中写道(我编辑了这篇文章),仍然有问题.你能再帮我一次吗?我打赌是数组字段,在这种情况下,你必须使用谢谢!我几分钟前找到了AnyIn。但基本上-你的答案帮助了我。我将用AnyIn和AnyIn更新答案!很高兴提供帮助。愉快的编码!谢谢!部分解决了我的问题。但我在问题中写道,对于Nin仍然有问题(我编辑了这篇文章)。你能再帮我一次吗?我打赌它是数组字段,在这种情况下,你必须使用谢谢!我在几分钟前找到了AnyIn。但基本上-你的答案帮助了我。我将用AnyIn和AnyIn更新答案!很高兴提供帮助。编码愉快!
Builders<Record>.Filter.Not(Builders<Record>.Filter.Where(record => allScenarios.Any(s => record.ExcludedIds.Contains(s))))
        );
Builders<Record>.Filter.Nin(ts => ts.ExcludedScenarioGuids, allScenarios)
Cannot convert lambda expression to type FieldDefinition<Records, string> because it not a delegate type.