使用基于Value的linq比较两个列表

时间:2012-06-29 06:24:34

标签: linq

我正在使用silverlight 4.我有一个场景,我需要根据值比较两个列表。

  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**

我正在使用这么多for循环,但我想用一个简单的方法使用linq。

有什么简单的方法可以在silverlight中使用 LINQ 找到它们。

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

假设正确设置了相等性:

  

1)var sameentities =两个列表中存在哪些实体。

var same = list1.Intersect(list2);
  

2)var existinlst1 =哪些实体仅存在于lstoptions1。

var list1Only = list1.Except(list2);
  

3)var notexistinlist1 =哪些实体不仅存在于lstoptions1。

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