我正在尝试获取两个表中存在的IP地址列, A 和 B 。表 A 具有许多IP地址和表 B 中不存在的特定IP地址。我想从两个表中获得不同的IP地址。这意味着我想要表 A 中的所有IP地址(表 B 中没有),以及来自表 B 的所有IP地址表 A 中没有出现。我正在尝试下面的代码,它只给我表 B 中没有的IP地址。请帮忙。
var ips= (from a in CS.A
where !CS.B.Any(f => f.IPAddress == a.IPAddress)
select a.IPAddress).Distinct();
答案 0 :(得分:0)
你可以简单地使用这个
var ips= ((from a in CS.A
where !CS.B.Any(f => f.IPAddress == a.IPAddress)
select a.IPAddress).Distinct()).Union((from b in CS.B
where !CS.A.Any(f => f.IPAddress == b.IPAddress)
select b.IPAddress).Distinct());
答案 1 :(得分:0)
您只需Concat
IP列和group by
IP。
然后只选择计数为1的组(= IP仅出现在一个表中)
var res =
(from ip in CS.A.Select(x => x.ip)
.Distinct()
.Concat(CS.B.Select(x => x.ip).Distinct())
group ip by ip into grp
where grp.Count() == 1
select grp.Key).ToList();
您可以使用以下示例对此进行测试:
var x1 = Enumerable.Range(0, 20);
var x2 = Enumerable.Range(5, 20);
var res =
(from ip in x1.Select(x => x).Distinct().Concat(x2.Select(x => x).Distinct())
group ip by ip into grp
where grp.Count() == 1
select grp.Key).ToList();
res.ForEach(Console.WriteLine);
答案 2 :(得分:-1)
我的第一个建议是使用商店程序来实现这一目标。有点像:
SELECT tblA.ip, tblB.ip FROM Table1 tblA
INNER JOIN Table2 tblB
ON 1=1
GROUP BY tblA.ip
这里的“开启”会给你一个永远正确的条件。
大致相同的查询也应该与linq一起使用。实验: - )
修改强> UNION也是一种选择,但非SQL开发人员很容易阅读。
Select distinct cmnTbl.ip from (SELECT tblA.ip from Table1 tblA UNION SELECT tblB.ip from Table1) cmnTbl