Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.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/2/.net/24.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
使用Filter将mongo查询转换为C#_C#_.net_Mongodb_Mongodb Query_Mongodb .net Driver - Fatal编程技术网

使用Filter将mongo查询转换为C#

使用Filter将mongo查询转换为C#,c#,.net,mongodb,mongodb-query,mongodb-.net-driver,C#,.net,Mongodb,Mongodb Query,Mongodb .net Driver,有没有办法在C#中使用过滤器并翻译这个mongo查询 {'EmailData.Attachments.Files': {$all: [{Name: 'a.txt'},{Name: 'b.txt'},{Name:'c.txt'}], $size: 3}} 我的数据模型如下: { "_id": ObjectId("5f0a9c07b001406068c073c1"), "EmailData" : [ { &q

有没有办法在C#中使用过滤器并翻译这个mongo查询

{'EmailData.Attachments.Files': {$all: [{Name: 'a.txt'},{Name: 'b.txt'},{Name:'c.txt'}], $size: 3}}
我的数据模型如下:

{
"_id": ObjectId("5f0a9c07b001406068c073c1"), 

"EmailData" : [
    {

        "Attachments" : {

            "Files" : [
                {
                    "Name" : "a.txt" 

                }, 
                {
                    "Name" : "b.txt"
                }, 
                {
                    "Name" : "c.txt"

                }
            ]
        }
    }
]
}
我脑子里有这样的想法:

    var Filter =
                Builders<EmailEntity>.Filter.All(s => s.EmailData????);
var过滤器=
Builders.Filter.All(s=>s.EmailData??);
或者类似于:

var Filter =
                Builders<EmailEntity>.Filter.ElemMatch(s => s.EmailData???)
var过滤器=
Builders.Filter.ElemMatch(s=>s.EmailData??)

我想知道在上面的过滤器中是否有任何方法可以在ElemMatch内部使用
All

这里的困难在于
EmailData.Attachments.Files
是另一个数组中的数组,因此当您尝试使用表达式树时,C编译器将丢失

谢天谢地,当您需要使用MongoDB.NET驱动程序定义字段时,还有另一种方法。您可以利用
StringFieldDefinition

尝试:

var files=new[]{new FileData(){Name=“a.txt”},new FileData(){Name=“b.txt”},new FileData(){Name=“c.txt”};
FieldDefinition fieldDef=新的StringFieldDefinition(“EmailData.Attachments.Files”);
var filter=Builders.filter.And(
Builders.Filter.All(fieldDef,文件),
构建器.过滤器.大小(fieldDef,3));
var result=collection.Find(filter.ToList();

了解StringFieldDefinition对我来说非常有趣,谢谢。
var files = new[] { new FileData(){ Name = "a.txt"}, new FileData() { Name = "b.txt" }, new FileData() { Name = "c.txt" } };

FieldDefinition<EmailEntity> fieldDef = new StringFieldDefinition<EmailEntity>("EmailData.Attachments.Files");

var filter = Builders<EmailEntity>.Filter.And(
                 Builders<EmailEntity>.Filter.All(fieldDef, files),
                 Builders<EmailEntity>.Filter.Size(fieldDef, 3));

var result= collection.Find(filter).ToList();