2014-02-06 32 views
1

ID我有两个列表:查找其他列表

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

我的课是这样的:

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

和:

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

我现在想通过迭代我的jobList,并得到所有的工作,其中masterDataList的所有ID的MasterDataId之一。 我怎样才能做到这一点与LINQ(对象)?

回答

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

或更有效的方式可能会使用一个HashSet:

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

这将无法工作;)'(M => m.MasterDataId == j.Id)'应'(M => m.Id ==Ĵ。 MasterDataId)' – WiiMaxx

1

使用LINQ WhereAny

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

或者

var result = from j in jobList where j.MasterDataId == 5 select j;