1

我正在使用 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找到它们。

谢谢你的帮助。

4

1 回答 1

4

假设正确设置了相等性:

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

var same = list1.Intersect(list2);

2) var existslst1= 哪些实体仅存在于 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
于 2012-06-29T06:27:26.440 回答