111,130
社区成员
发帖
与我相关
我的任务
分享
DataTable dt = new DataTable();
dt.Columns.Add("c1");
dt.Rows.Add(1);
dt.Rows.Add(2);
dt.Rows.Add(3);
DataTable dt2 = new DataTable();
dt2.Columns.Add("c1");
dt2.Rows.Add(2);
var query = dt.AsEnumerable().Except(dt2.AsEnumerable());
foreach (var w in query)
{
Response.Write(w.Field<string>("c1") + "<br>");
}
/*
结果:
1
2
3
为什么不是:
1
3
*/
Response.Write("<hr>");
List<string> l = new List<string>();
l.Add("1");
l.Add("2");
l.Add("3");
List<string> l2 = new List<string>();
l.Add("2");
var query2 = l.Except(l2);
foreach (var w in query2)
{
Response.Write(w + "<br>");
}
/*结果是:
1
3
*/
为什么这个又是正确的呢?
修改如下后得到了正确的结果,原来linq也不能自动对比集合.
var query = (from w in dt.AsEnumerable()
select w.Field<string>("c1")).Except(from w in dt2.AsEnumerable() select w.Field<string>("c1"));
foreach (var w in query)
{
Response.Write(w + "<br>");
}