2013-08-27 3 views
-4

나는 몇 가지 예를 찾아 보았는데, 내가 갖고있는 것과 비슷한 것을 발견하지 못했습니다.리스트 <object> 비교

은 내가 obj1_qty을하지, 난 ListB이 때문에 양이다 것과 동일한 이름을 가진 만일 그렇다면 객체를 포함하는 경우 표시 할 기본 목록으로 챠트를 사용하여, 이제이 개 목록

class object1 
{ 
    string obj1_name; 
    int obj1_qty; 
} 
List<object1> listA 

class object2 
{ 
    string obj2_name; 
    int obj2_qty; 
} 
List<object2> listB; 

이 = obj2_qty 서로? 만약 그렇지 않다면, 차이점이 있으며 그것을 보여줄 필요가 있습니다. 제 3의 목록에 차이가있을 가능성이 있습니다. 참고 챠트는 ListB

  • 모두보기 목록 A (마스터 목록은 모든 개체를 포함)
  • 가 모두 목록에 존재하는 그 이름/수량의 차이를보기보다 크거나 작을 수있다.

그라시아

+5

나는 당신이 지금까지 시도 한 내용을 게시하는 것이 좋습니다. 많은 사람들이 노력을했음을 보여주지 않으면 코드를 작성할 준비가되어 있지 않습니다. –

+5

왜 같은 '회원'을 가진 2 개의 클래스가 필요합니까? –

+0

두 객체 모두'Name' 및'Qty' 속성을 노출하는 동일한 인터페이스에서 상속받을 수 있습니까? 또한 귀하의 코드는 컴플라이언스가 아니므로 종료 될 수 있습니다. 제발 [편집 질문] (http://stackoverflow.com/posts/18468317/edit) 적어도 클래스의 완전한 컴파일 버전을 제공합니다. –

답변

2

지금의 항목에 대한 참조를 보유하고 익명 클래스의 IEnumerable을 보유 할이

var items = from l1 in listA 
      join l2tmp1 in listB on l1.obj1_name equals l2.obj2_name into l2tmp2 
      from l2 in l2tmp2.DefaultIfEmpty(); 
      select new { 
       ItemA = l1, 
       ItemB = l2, 
       Name = l1.obj1_name, 
       Difference = (l2 == null) ? 0 : l1.ob1_qty - l2.ob2_qty 
      }; 

items Linq에

에서 조인을 사용한다이 작업을 수행하는 simpelest 방법 ListA, listB의 항목에 대한 참조, 일치하는 이름 및 차이. 당신을 위해 일 것입니다 가입과 같은

+0

그래서 인터페이스를 사용하면 어떤 솔루션을 사용할 수 있습니까? – Servy

+1

사용자 정의 IEqualityComparer가 두 가지를 비교하는 데 사용됩니다 ... 좋습니다. 인터페이스가 도움이되지 않습니다. 나는 그 부분을 제 대답에서 삭제했습니다. –

+1

인터페이스는이 데이터를 다룰 때 다른 문제에 도움이 될 수 있지만 *이 특정 문제에 대해서는 Join이 동일한 인터페이스를 구현하는지 여부에 관계없이 가장 좋고/쉽습니다. – Servy

3

Souncs :

var query = from a in listA 
      join b in listB on a.obj1_name equals b.obj2_name 
      where a.obj1_qty != b.obj2_qty 
      select new { 
       Name = a.obj1_name, 
       QtyA = a.obj1_qty, 
       QtyB = b.obj2_qty, 
       Diff = a.obj1_qty - b.obj2_qty 
       }; 
+0

'= '를 당신의'on' [equals'과] (http://msdn.microsoft.com/en-us/library/bb311040.aspx) –

+0

@ScottChamberlain은 항상 그 부분을 잊어 버렸습니다. –

+0

@DStanley. .ToList() .... 내 무지를 용서하지 않습니까? – Timujin