【问题标题】:Find id from other list从其他列表中查找 id
【发布时间】:2014-02-06 14:56:44
【问题描述】:

我有两个列表:

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 中具有MasterDataId 之一的所有工作。 如何使用 LINQ(对象)做到这一点?

【问题讨论】:

    标签: c# linq linq-to-objects


    【解决方案1】:
    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));
    

    【讨论】:

      【解决方案2】:
      jobList.Where(j=>masterDataList.Any(m=>m.MasterDataId == j.Id))
      

      【讨论】:

      • 这不起作用 ;) (m=&gt;m.MasterDataId == j.Id) 应该是 (m=&gt;m.Id == j.MasterDataId )
      【解决方案3】:

      使用Enumerable.WhereEnumerable.Any 进行如下查询:

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

      【讨论】:

        【解决方案4】:

        将 LINQ WhereAny 一起使用:

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

        【讨论】:

          【解决方案5】:
          var result = jobList.where(j => j.MasterDataId == 5);
          

          或者

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

          【讨论】:

            猜你喜欢
            • 2015-11-25
            • 1970-01-01
            • 1970-01-01
            • 2022-01-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-05-15
            • 1970-01-01
            相关资源
            最近更新 更多