2017-01-30 97 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

很高興幫助 - 現在應該修復 –