2012-06-29 5 views
1

나는 실버 라이트를 사용하고 있습니다. 4. 값을 기반으로 두 목록을 비교해야하는 시나리오가 있습니다.값을 기반으로하는 linq를 사용하는 두 목록 비교

List<Option> lstoption1 = new List<Option>(); 
    Option opt = new Option(); 
    opt.OptionText = "Text1"; 
    lstoption1.add(opt) 

    Option opt2 = new Option(); 
    opt2.OptionText = "Text2"; 
    lstoption1.add(opt2) 


    Option opt3 = new Option(); 
    opt3.OptionText = "Text3"; 
    lstoption1.add(opt3) 



    List<Option> lstoption2 = new List<Option>(); 
    Option opt = new Option(); 
    opt.OptionText = "Text1"; 
    lstoption2.add(opt) 

    Option opt2 = new Option(); 
    opt2.OptionText = "Text4"; 
    lstoption2.add(opt2) 

    Option opt3 = new Option(); 
    opt3.OptionText = "Text3"; 
    opt3.OptionChecked = false; 

    lstoptions2.add(opt3) 

나는 OptionText

1) var sameentities= which entities exisits in both lists. 

    ie : it should return entities that has OptionText as 
      **Text1 & Text3** 

    2) var existinlst1= which entities exists only in lstoptions1. 

    ie : it should return entity that has OptionText as 
      **Text2** 

    3) var notexistinlist1=which entities not exists only in lstoptions1. 

     ie : it should return entity that has OptionText as 
      **Text4** 

나는 이것에 대한 루프를 너무 많이 사용하고 기반으로 theese 두 목록을 비교해야하지만 난 LINQ를 사용하여 간단한 방법으로 그것을하고 싶어.

LINQ을 실버 라이트로 사용하여 쉽게 찾을 수 있습니다.

도움 주셔서 감사합니다.

답변

4

가정 평등 적절하게 설정 :

1) var에 sameentities의 = 엔티티 exisits을 모두 목록에. 기관은 lstoptions1에 존재

var same = list1.Intersect(list2); 

2) var에 existinlst1

=. 기관뿐만 아니라 lstoptions1에 존재

var list1Only = list1.Except(list2); 

3) var에 notexistinlist1 =.

var list2Only = list2.Except(list1); 

는 (내 생각 - 당신의 설명은 매우 명확하지 않습니다.)

당신은 당신이 필요한 경우 옵션 텍스트로 바로 비교하는 이러한 모든 방법으로 사용자 지정 같음 비교를 전달할 수 있습니다. 결과에서 옵션 텍스트 만 필요한 경우 먼저 프로젝트를 프로젝션 할 수 있습니다.

var text1 = list1.Select(x => x.OptionText); 
var text2 = list2.Select(x => x.OptionText); 
// Now use the same methods as before, but with text1 and text2 
+0

동등 비교자를 OptionText로 전달하는 방법. – Chakradhar

+0

@Chakradhar : 비교자를 만들거나 전달하는 데 어떤 비트를 이해하지 못합니까? 각 메소드에 대한 두 번째 인수로 전달하면됩니다. –

+0

마지막으로 완료 ... – Chakradhar