我正在使用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 找到它们。
感谢您的帮助。
答案 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