2014-08-27 2 views
2

두 개의 목록이 있습니다. 각 목록에는 Name 개체와 Value 개체가 있습니다. list1을 통해 반복하고 각 list1 Name 객체가 list2 Name 객체와 동일한 지 확인하십시오 (아래 linq 코드에서이 작업을 수행함).두 개의 목록을 여러 개체와 비교하고 값을 설정하는 방법은 무엇입니까?

일치하는 경우 을 list2 Value으로 설정하고 싶습니다. 어떻게 수행 할 수 있습니까?

list1    list2 
Name Value  Name Value 
john orange  john orange 
peter grape  peter grape 

의 LINQ 코드 :

var x = list1.Where(n => list2.Select(n1 => n1.Name).Contains(n.Name)); 
+0

가입 정규 표현식 일치 요구 사항이 없어 졌습니까? –

+0

@IgorPashchuk : 아무도 대답하지 않으면 그는 그것을 제거했습니다. 나는 그가 그것을 제거하기 직전에 받아 들여진 대답에 코멘트를 덧붙였지만 나는 그 사람이 알아 차리기에는 너무 늦었다 고 생각한다. –

+0

@IgorPashchuk 질문을 다시해야하기 때문에 삭제했습니다. 내가 몇 분 안에 그것을 다시 넣을 수 –

답변

2

을 당신이 LINQ을 사용할 수 있습니다 설정 필터링에 대한 값은 루프 사용

var commonItems = from x in list1 
        join y in list2 
        on x.Name equals y.Name 
        select new { Item = x, NewValue = y.Value }; 

foreach(var x in commonItems) 
{ 
    x.Item.Value = x.NewValue; 
} 
+0

'select {Item = x, NewValue = y.Value};'행이 작동하지 않습니다. 'x'와'y'를 찾을 수 없습니다 –

+0

작동하지 않습니다 –

+0

'선택'후에'new'가 누락되었습니다 –

1

하나 개의 결과에서, 당신은 객체가 함께 결합 얻을 수 있습니다 :

list1    list2 
Name Value  Name Value 
john apple  John orange 
peter null  Peter grape 

나는 그것을 같이 할 필요가

var output= from l1 in list1 
     join l2 in list2 
     on l1.Name equals l2.Name 
     select new { List1 = l1, List2 = l2}; 

그런 다음 반환 된 개체를 조작합니다. 결과. 각 통해 반복 및 설정 :

foreach (var result in output) 
    result.List1.Value = result.List2.Value; 
0

당신은 왼쪽을 찾고 있습니다를

var x = from l1 in list1 
     join l2 in list2 on l1.Name equals l2.Name into l3 
     from l2 in l3.DefaultIfEmpty() 
     select new { Name = l1.Name, Value = (l2 == null ? l1.Value : l2.Value) }; 
관련 문제