使用LINQ将另一个列表过滤掉列表

时间:2017-01-30 04:38:57

标签: c# linq list

您好我在这里找不到问题的答案,所以我想我只是问。我必须列出类,ServiceItem和ServiceDetailsClass。我想过滤掉所有不是int ServiceItems列表的ServiceDetailClass项。以下是两个类:

public class ServiceItem
{
    public long ID { get; set; }
    public string Status { get; set; }
}

public class ServiceDetailsClass
{
    public string Name;
    public long ID;
    public int Quantity;
    public string Notes;
    public string Status;
    public string Description;
    public DateTime CreatedDate;
}

到目前为止,我在这里发现的唯一事情是列表中有列表,所以这有点不同。这是我能想到的全部,但是过滤器列表有0个项目,即使我知道它应该有更多:

lstFilteredServiceDetailsClass = lstServiceDetailsClass.Where(i => lstServiceItem.Contains
      (new ServiceItem { lngId = i.ServiceID, strStatus = "Locked" }) 

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:3)

您正在创建一个新对象,然后检查列表以查看该对象/实例是否在其中(即因为它是一个对象,它正在比较该引用)。

相反,您需要查找重叠的ID。

这样的事情应该有效:

List<ServiceItem> serviceItems;
List<ServiceItemDetails> serviceItemDetails;

var result = serviceItemDetails.Where(sid => serviceItems.Any(si => si.ID == sid.ID))

英文:“ServiceItemDetails的集合,其中服务项目列表具有相同ID的项目”