using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MongoDB.Driver; namespace MongoAllBug { class Program { static void Main(string[] args) { var client = new MongoClient(); var collection = client.GetDatabase("Test").GetCollection("Products"); var queryable = collection.AsQueryable(); var requiredMeta = new List { new MetaField {Key = "Key1", Value = "Val1"}, new MetaField {Key = "Key2", Value = "Val2"} }; var results = queryable .Where(x => x.Occurrences.Any(o => requiredMeta.All(i => o.Meta.Contains(i)))) .ToList(); /* Resulting aggregation pipeline (note missing Occurrences part): [ { "$match" : { "Meta" : { "$all" : [ { "Key" : "Key1", "Value" : "Val1" }, { "Key" : "Key2", "Value" : "Val2" } ] } } } ] */ } } public class Product { public string Name { get; set; } public List Occurrences { get; set; } } public class Occurrence { public List Meta { get; set; } public Occurrence() { Meta = new List(); } } public class MetaField { public string Key { get; set; } public string Value { get; set; } } }