2016-06-21 146 views
0

我有一個列表GroupMembershipValidList包含GroupMembershipUploadInput類型的對象。LINQ查詢從一個集合到另一個集合

這GroupMembershipUploadInput類定義看起來像

public class GroupMembershipUploadInput 
    { 
     public string chpt_cd { get; set; }} 
     public string cnst_last_nm { get; set; } 
     public string appl_src_cd { get; set; } 

    } 

我已經簡化了簡單起見定義。

現在我有另一個列表_validChapterCodespublic List<ChapterCodeValidationOutput> _validChapterCodes { get; set; }

包含類型的對象

public class ChapterCodeValidationOutput 
{ 
    public string chpt_cd { get; set; } 
    public string appl_src_cd { get; set; } 
} 

所以,我想要做的就是..如果從列表A中的chpt_cd名單B匹配,然後將列表B中的appl_src_cd名稱填充到列表A中的對象。

我該怎麼做LINQ?

我想...

gmvo.GroupMembershipValidList.GroupMembershipUploadInputList.Where(x => gmvo._validChapterCodes.Contains(x.chpt_cd)).Select(y => y.appl_src_cd); 

但我知道我沒有做正確。

+0

收集你真的應該看看讓你的特性有意義的名字。這是一個很好的習慣。 –

回答

1

LINQ有功能辦法,這意味着它是越來越值了一組現有值的,而不是爲操縱現有值。

所以你不能避免在這裏至少有一個foreach。我會做這樣的:

foreach(var chapter in _validChapterCodes) 
{ 
    ChapterCodeValidationOutput output = GroupMembershipValidList.FirstOrDefault(e => 
     e.chpt_cd == chapter.chpt_cd); 
    if (input != null) chapter.appl_src_cd = input.appl_src_cd; 
} 

FirstOrDefault()從您的輸入列表返回的第一個元素與匹配chpt_cdnull如果沒有匹配的元素。


編輯:從你的問題我不知道,如果你希望它這樣或周圍的其他方式(是什麼列表一個名單B?)。所以爲了完整性的另一種方式:

foreach(var input in GroupMembershipValidList) 
{ 
    var chapter = _validChapterCodes.FirstOrDefault(e => 
     e.chpt_cd == input.chpt_cd); 
    if (chapter != null) input.appl_src_cd = chapter.appl_src_cd; 
} 
+0

好的,但如果對於列表中的第二個對象,chpt_cd與第一個對象相同,對於第二個對象,appl_src_cd將作爲null。我怎樣才能避免它? – StrugglingCoder

+0

不,如果它是相同的'chpt_cd',它會返回相同的元素。你沒有在你的問題中指定這些'chpt_cd'是否是唯一的,或者你想要如何填充'appl_src_cd'。 –

1

您可以使用LINQ表達式。

var a = new List<GroupMembershipUploadInput> 
{ 
    new GroupMembershipUploadInput() {chpt_cd = "A" }, 
    new GroupMembershipUploadInput() {chpt_cd = "A2"" }, 
    new GroupMembershipUploadInput() {chpt_cd = "A3" } 
}; 

var b = new List<ChapterCodeValidationOutput> 
{ 
    new ChapterCodeValidationOutput() {chpt_cd = "A", appl_src_cd = "ACode"}, 
    new ChapterCodeValidationOutput() {chpt_cd = "C2", appl_src_cd = "C22"}, 
    new ChapterCodeValidationOutput() {chpt_cd = "A3", appl_src_cd = "A33"} 
}; 


var result = a.Select(s => new GroupMembershipUploadInput 
{ 
    chpt_cd = s.chpt_cd, 
    appl_src_cd = b.Any(u => u.chpt_cd == s.chpt_cd) ? 
          b.First(v => v.chpt_cd == s.chpt_cd).appl_src_cd:string.Empty 
}).ToList(); 

假設是GroupMembershipUploadInput和B的集合是ChapterCodeValidationOutput

+0

它會在這裏填充相同的集合嗎? – StrugglingCoder

+0

是的。結果將是所有來自a的項目的新列表,但appl_src_cd屬性填充來自集合b的值以用於匹配項目。 – Shyju

+1

這就是要點,這會創建一個_new_列表,但不會像請求的問題那樣填充_existing_列表。 –

相關問題