作者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/m.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