Home > Software design >  Linq query to select any in list against a list
Linq query to select any in list against a list

Time:03-16

Using EF Core code-first, and I want to find any record with a similar list of a foreign entities to the entity I already have.

public class ClownModel {
    public int Id { get; set; }
    public List<CarModel> Cars { get; set; }
}
public class CarModel {
    public int Id { get; set; }
}

var MyClown = new ClownModel() { /*add properties*/ } 
//or maybe an existing record selected from database, just some ClownModel instance

Basically, "Select all the ClownModels where they have any Cars.Id that are in my MyClown.Cars"

CodePudding user response:

Assuming that ClownModel has unique CarModel Id's, you can use the following query:

Matches All Ids

var ids = MyClown.Cars.Select(c => c.Id).ToList();

var query = 
    from cm in ctx.ClownModel
    where cm.Cars.Where(c => ids.Contains(c.Id)).Count() == ids.Count
    select cm;

Matches Any Ids

var ids = MyClown.Cars.Select(c => c.Id).ToList();

var query = 
    from cm in ctx.ClownModel
    where cm.Cars.Where(c => ids.Contains(c.Id)).Any()
    select cm;
  • Related