作者kajm (kajm)
看板C_Sharp
标题[问题] DataTable用来当做SQL的Table?
时间Sun Nov 8 23:17:00 2015
各位前辈好,
最近在遇到一个状况是,
程式已经执行到从资料库取出几笔资料且存在一个DataTable内,
然而现在需要去资料库里面捞出剩下不在这张Table内的资料,
而且因为Table是用双主键的方式,所以必须要同时判断两个栏位
举例而言,如果我目前的状况是:
[资料库内资料] [已取出的DataTable]
No Version No Version
1 1 1 1
2 1 2 1
2 2 3 2
3 1
3 2
所以我需要取出的是剩余的:
[剩下来的资料]
No Version
2 2
3 1
问题在於,已经取出的资料是在程式里面,不是资料库里面的Table
而且No跟Version两个栏位都要同时符合...
原本我是想说用NOT IN的方式,但是後来发现似乎没办法同时比较两个栏位?
想了一阵子实在找不到办法,只好发文求救了...QQ
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.133.198.233
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1446995823.A.B68.html
1F:推 leicheong: NOT(A.No=B.No AND A.Version = B.Version) ? 11/08 23:30
2F:推 johnpage: 仅对标题回答,请使用LINQ 11/08 23:32
3F:→ leicheong: 把你那datatable写进temp table再处理比较有效率. 11/08 23:32
4F:→ leicheong: 楼楼上这也对啦. 11/08 23:33
照l大的做法可以找到符合条件的资料了,可是他会变成两张表JOIN的全部结果
例如:
[Result]
No Version
1 1 ┐
1 1 ┘ 因为条件成立了
2 1 ┐ 所以这两组都少了一笔没错
2 1 ┘
2 2 ┐
2 2 ├ 这里因为不在B表里面,所以有三笔
2 2 ┘
...下略
我的SQL写法是:
SELECT A.No, A.Version
FROM A, B
WHERE NOT(A.No = B.No AND A.Version = B.Version);
我觉得剩下的这个问题好像很基本...但是我试了一下还是没做出来QQ
另外j大提到的LINQ我有机会会再试试看的,感谢!
※ 编辑: kajm (220.133.198.233), 11/09/2015 00:22:44
5F:推 wanderer1412: 先一次取出,再用defaultview的rowfilter区分, 11/09 00:20
6F:→ wanderer1412: 分别存在两个不同的 table,就是你要的 11/09 00:21
7F:→ kajm: 有了!照w大的方法试出来了,万分感激! 11/09 01:08