刚在优快云上回答了一个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