2017-01-30 91 views
0

嗨我很难在这里找到我的问题的答案,所以我想我只是问。我必须列出类,ServiceItem和ServiceDetailsClass。我想过滤掉所有不是int ServiceItems列表的ServiceDetailClass项目。这里有两类:使用LINQ过滤列表与另一个列表

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" }) 

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

+0

这个怎么样的:var'过滤= lstServiceDetailsClass.Where(i =>!lstServiceItem.Any(x => x.Status ==“Locked”));'? –

回答

2

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

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

像这样的东西应该工作:

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

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

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

+0

感谢您的快速响应,但我遇到了这个问题。当我尝试执行它时,出现错误:“无法将lambda表达式转换为输入VendorBooths.WebServices.EventWebMethods.ServiceItem'。” – Vandel212

+0

很高兴帮助 - 现在应该修复 –