Linq 对两个结果集中存在相等值进行比较后筛选生成两个序列的差集

刚在优快云上回答了一个Linq 对两个结果集中存在相等值进行比较后筛选生成两个序列的差的问题,。原文地址:http://bbs.youkuaiyun.com/topics/390801113?page=1#post-397488195,现在特此记录下来

现在有两个结果集做筛选
第一个结果集
如:
var search1= from  c in AA select new{科目:book,姓名=name,价格=price};
第个二个结果集
如:
var search2=from c in CC select new{ 姓名=name,年龄=old};

现在要筛选 search1 中姓名不在search2中的记录如何查


C#代码:

  private void button4_Click(object sender, EventArgs e)
		  {
			   List<AA> lstA = new List<AA>(){
			   new AA { book = "科目1", name = "张三", price = "100" },
			   new AA { book = "科目2", name = "李素", price = "300" },
					 new AA { book = "科目3", name = "王五", price = "3400" }};

			   List<CC> lstC = new List<CC>() { 
			   new CC{name="张三",old="24"}, new CC{name="王五",old="26"} ,
			   new CC{name="王五五",old="27"}
			   };
			   //利用Contains来比较来着
			   var jj = from p in lstA where !(from pp in lstC select pp.name).Contains(p.name) select p.name;
			   foreach (var item in jj)
			   {
					MessageBox.Show(item.ToString());
			   }
			   //利用Except来比较来着 
			   IEnumerable<string> dd = (from p in lstA select p.name).Except(from p in lstC select p.name);
			   foreach (var item in dd)
			   {
					MessageBox.Show(item.ToString());
			   }
			   //输出李素不在CC里面
		  }
		  public class AA
		  {
			   public string book { get; set; }
			   public string name { get; set; }
			   public string price { get; set; }
		  }
		  public class CC
		  {
			   public string name { get; set; }
			   public string old { get; set; }
		  }

说明:

Except(与非)

说明:排除相交项;延迟。即是从某集合中删除与另一个集合中相同的项。先遍历第一个集合,找出所有唯一的元素,然后再遍历第二个集合,返回第二个集合中所有未出现在前面所得元素集合中的元素。

参考地址:http://msdn.microsoft.com/zh-cn/library/bb348938.aspx

Contains

说明:用于判断集合中是否包含有某一元素;不延迟。它是对两个序列进行连接操作的。

参考地址:http://msdn.microsoft.com/zh-cn/library/bb338641%28v=vs.110%29.aspx


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值