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

Van*_*212 1 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;
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我在这里找到的唯一内容是包含列表的列表,所以这有点不同。这就是我所能想到的,但过滤器列表有 0 个项目,即使我知道它应该有更多:

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

任何帮助表示赞赏。谢谢!

AMZ*_*AMZ 7

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

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

这样的事情应该工作:

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

var result = serviceItemDetails.Where(sid => serviceItems.Any(si => si.ID == sid.ID))
Run Code Online (Sandbox Code Playgroud)

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