2012-06-29 3 views
1

현재 회계 응용 프로그램 (즉, Quickbooks)과 SQL 데이터베이스간에 정보를 동기화하는 MiddleWare 응용 프로그램을 작성하고 있습니다. 필자는 Linq-To-SQL을 처음 접했을 뿐이며, 현재는 원래 간단한 문제로 보인 것을 고심하고있다.Where 절이 아닌 부분 삭제 - Linq-To-SQL

간단히 말해 회계 프로그램 (예 : AR, 소득, 지출, 책임 등)에서 계정과 목표를 쿼리하는 논리가 있습니다. 그런 다음 미들웨어는 각 레코드에 대해 SQL 데이터베이스의 계정 테이블에 계정을 삽입, 업데이트 또는 삭제해야하는지 여부를 결정해야합니다. 연산이 삽입인지 삭제인지는 쉽게 알 수 있지만 Quickbooks에서 계정이 삭제되어 SQL 데이터베이스에서 삭제해야하는 경우에 어려움을 겪고 있습니다. ListID가 쿼리에서 검색된 ListID 목록에없는 계정 테이블에서 모든 레코드를 기본적으로 삭제하는 Linq-To-Sql 쿼리를 실행하고 싶습니다. Linq-To-SQL에서 이것을 수행하는 쉬운 방법이 있습니까?

답변

3
db.accounts.Where(x => !ListIDs.Contains(x.ID)) 
3

별도의 쿼리에 ListIDs (listOfIDs)의 목록을 채워 한 가정 : 람다 또는 같은 전에 말했듯이 간단한 LINQ와

var accounts = from a in db.Accounts 
       where !listOfIDs.Contains(a.ListID) 
       select a; 
db.Accounts.RemoveAll(accounts); 
db.SubmitChanges(); 
1

요청을.

db.accounts.Attach(yourObject); 
db.accounts.DeleteOnSubmit(yourObject); 
db.SubmitChanges(); 

물론 이죠. try/catch로 보호하고 Linq에 오신 것을 환영합니다!

0

사용중인 SQL 드라이버 중 어느 것이 든 (꽤 짧은 목록), 드라이버가 QuickBooks SDK를 사용하여 계정과 목표 차트에 액세스하는 것이 확실합니다. SDK에는 ListDeletedQuery이라는 삭제 된 항목 (예 : 계정)을 찾는 특별한 쿼리가 있습니다. 일반적으로 삭제 된 항목을 찾으려면 ListDeletedQuery을 사용하는 것이 더 효율적입니다. 그러나 일반적으로 계정과 목표 차트는 매우 작기 때문에 누락 된 요소를 찾으려면 전체 목록을 검사하는 것이 좋습니다. 또한 ListDeletedQuery은 사용중인 SQL 드라이버에 의해 노출되지 않을 수도 있습니다.

관련 문제