You are currently browsing legacy 4.0 version of documentation. Click here to switch to the newest 4.2 version.

We can help you with migration to the latest RavenDB

Contact Us Now
see on GitHub

Session: Querying: How to Use Intersect

To return only documents that match all provided sub-queries, use the Intersect extension which enables RavenDB to perform server-side intersection queries.

Syntax

IRavenQueryable<T> Intersect<T>();

Example

// return all T-shirts that are manufactured by 'Raven'
// and contain both 'Small Blue' and 'Large Gray' types
IList<TShirt> tshirts = session.Query<TShirts_ByManufacturerColorSizeAndReleaseYear.Result, TShirts_ByManufacturerColorSizeAndReleaseYear>()
    .Where(x => x.Manufacturer == "Raven")
    .Intersect()
    .Where(x => x.Color == "Blue" && x.Size == "Small")
    .Intersect()
    .Where(x => x.Color == "Gray" && x.Size == "Large")
    .OfType<TShirt>()
    .ToList();
// return all T-shirts that are manufactured by 'Raven'
// and contain both 'Small Blue' and 'Large Gray' types
IList<TShirt> tshirts = await asyncSession.Query<TShirts_ByManufacturerColorSizeAndReleaseYear.Result, TShirts_ByManufacturerColorSizeAndReleaseYear>()
    .Where(x => x.Manufacturer == "Raven")
    .Intersect()
    .Where(x => x.Color == "Blue" && x.Size == "Small")
    .Intersect()
    .Where(x => x.Color == "Gray" && x.Size == "Large")
    .OfType<TShirt>()
    .ToListAsync();
public class TShirts_ByManufacturerColorSizeAndReleaseYear : AbstractIndexCreationTask<TShirt>
{
    public class Result
    {
        public string Manufacturer { get; set; }

        public string Color { get; set; }

        public string Size { get; set; }

        public int ReleaseYear { get; set; }
    }

    public TShirts_ByManufacturerColorSizeAndReleaseYear()
    {
        Map = tshirts => from tshirt in tshirts
                         from type in tshirt.Types
                         select new
                         {
                             Manufacturer = tshirt.Manufacturer,
                             Color = type.Color,
                             Size = type.Size,
                             ReleaseYear = tshirt.ReleaseYear
                         };
    }
}
from index 'TShirts/ByManufacturerColorSizeAndReleaseYear' 
where intersect(Manufacturer = 'Raven', Color = 'Blue' and Size = 'Small', Color = 'Gray' and Size = 'Large')