2016-06-21 4 views
0

GroupMembershipUploadInput 유형의 개체가 포함 된 GroupMembershipValidList 목록이 있습니다. 아주 간단하게하기 위해 정의를 단순화 LINQ 하나의 컬렉션에서 다른 하나를 채우는 쿼리

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

    } 

처럼

이 GroupMembershipUploadInput 클래스 정의 보인다.

가 지금은 또 다른 목록을 _validChapterCodes 유형의 객체를 포함 (public 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_cd 또는 null 일치하여 입력 목록에서 첫 번째 요소를 반환합니다.


편집 : 당신이 그런 식으로 또는 다른 방법으로 주위를 원하는 경우 귀하의 질문에서 나는 확실하지 않다 (리스트 11.목록 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 표현식을 사용할 수 있습니다. A는 GroupMembershipUploadInput와 b의 모음입니다 가정

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(); 

당신은 정말 당신의 재산을 의미있는 이름을 부여 봐야한다 ChapterCodeValidationOutput

+0

같은 컬렉션을 여기에 채울 수 있습니까? – StrugglingCoder

+0

예. 결과는 a의 모든 항목이있는 새로운 목록이지만 appl_src_cd 등록 정보는 모음 b의 값으로 채워지는 항목과 일치합니다. – Shyju

+1

그것이 요점입니다. _new_ 목록을 만들지 만, 질문과 같이 _existing_ 목록을 채우지는 않습니다. –

관련 문제