質問

I have two lists:

List<MasterData> masterDataList;
List<Job> jobList;

My classes look like this:

public class Job
{
    ...
    public int MasterDataId { get; set; } //foreign key
}

And:

public class MasterData
{
    public int Id { get; set; }
}

I'd now like to iterate through my jobList and get all jobs which have one of the MasterDataId of all id's in masterDataList. How can I do this with LINQ (to objects)?

役に立ちましたか?

解決

jobList.Where(job => masterDataList.Any(m => m.Id == job.MasterDataId));

Or more efficient way might be using a HashSet:

var masterIdList = new HashSet<int>(masterDataList.Select(m => m.Id));
var result = jobList.Where(job => masterIdList.Contains(job.MasterDataId));

他のヒント

jobList.Where(j=>masterDataList.Any(m=>m.MasterDataId == j.Id))

Use Enumerable.Where with Enumerable.Any to query like:

var items = jobList.Where(r => masterDataList.Any(t => t.Id == r.MasterDataId));

Use LINQ Where with Any:

var matching = jobList.Where(jl => masterDataList.Any(mdl => jl.MasterDataId == mdl.Id)).ToList();
var result = jobList.where(j => j.MasterDataId == 5);

Or

var result = from j in jobList where j.MasterDataId == 5 select j;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top