2015-06-01 48 views
0

我有List<object>List<string>與記錄。我想要內連接這兩個列表。拉姆達表達加入列表<object>加入列表<string>

以下是我的記錄列表。

var listContributionDetailsToBeUpdated = new List<ContributionDetailModel> 
{ 
    new ContributionDetailModel { EmployeeNumber="1", EmployeeFirstName="david", EmployeeLastName="k", NHIPNumber="nhi-100" }, 
    new ContributionDetailModel { EmployeeNumber="2", EmployeeFirstName="xavior", EmployeeLastName="f",NHIPNumber="nhi-101"}, 
    new ContributionDetailModel { EmployeeNumber="3", EmployeeFirstName="george", EmployeeLastName="s", NHIPNumber="nhi-102" }, 
    new ContributionDetailModel { EmployeeNumber="4", EmployeeFirstName="pandit", EmployeeLastName="h",NHIPNumber="nhi-103"}, 
    new ContributionDetailModel { EmployeeNumber="5", EmployeeFirstName="zania", EmployeeLastName="d", NHIPNumber="nhi-104" } 
}; 

var updatedRecored = new List<string> { "nhi-100", "nhi-101", "nhi-102" }; 

任何人都可以幫助我內連接兩個列表。

回答

3

這很簡單。只要從貢獻細節關鍵NHIPNumber加盟:

var result = from c in listContributionDetailsToBeUpdated 
      join r in updatedRecored on c.NHIPNumber equals r 
      select c; 

方法的語法:

var result = listContributionDetailsToBeUpdated 
    .Join(updatedRecored, c => c.NHIPNumber, r => r, (c, r) => c); 

您還可以使用,而不是加入過濾,但它不是最佳的方式,因爲加入是一組操作它使用內部查找聯合收集。通過簡單的過濾,你將有複雜度爲O(N * M),而不是O(N + M)

var result = listContributionDetailsToBeUpdated 
    .Where(c => updatedRecored.Contains(c.NHIPNumber)); 
+0

任何一個可以幫助我獲得除所有記錄「updatedRecored」。更新的記錄是var updatedRecored = new列表 {「nhi-100」,「nhi-101」,「nhi-102」}; –

+0

@Vijeeshkumarvofox應該是另一個問題:)最簡單的解決方案'.Where(c =>!updatedRecored.Contains(c.NHIPNumber))'。爲了獲得更好的性能,可以使用group join(即'join ... into g')和'where where!g.Any()'進行過濾,或者使用hashset而不是npi號碼列表。 –

0

下也可以正常工作:

var result = listContributionDetailsToBeUpdated.Where(x => updatedRecored.Contains(x.NHIPNumber));