1

目前,我正在编写一个 MiddleWare 应用程序,用于在会计应用程序(即 Quickbooks)和 SQL 数据库之间同步信息。我对 Linq-To-SQL 相当陌生,目前正在努力解决最初看起来很简单的问题。

简而言之,我有从会计应用程序(即 AR、收入、费用、负债等)查询会计科目表的逻辑。然后,我的中间件必须确定是否需要在 SQL 数据库的 Accounts 表中为每条记录插入、更新或删除一个帐户。弄清楚操作是插入还是删除很容易弄清楚,但是,我正在努力解决从 Quickbooks 中删除帐户并需要从我的 SQL 数据库中删除的情况。我想运行一个 Linq-To-Sql 查询,该查询基本上从 Account 表中删除所有记录,其中 ListID 不在从查询中检索到的 ListID 列表中。是否有一些简单的方法可以在 Linq-To-Sql 中执行此操作?

4

4 回答 4

4

假设您在单独的查询中填充了 ListIDs (listOfIDs) 列表:

var accounts = from a in db.Accounts
               where !listOfIDs.Contains(a.ListID)
               select a;
db.Accounts.RemoveAll(accounts);
db.SubmitChanges();
于 2012-06-29T21:16:01.507 回答
3
db.accounts.Where(x => !ListIDs.Contains(x.ID))
于 2012-06-29T21:19:21.893 回答
1

如前所述,使用 lambda 或简单的 linq 请求它。然后

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

当然.. 用 try/catch 保护它,欢迎来到 Linq !!!

于 2012-06-29T21:28:45.350 回答
0

您没有说您使用的是哪个 SQL 驱动程序,但无论它是哪个(非常短的列表),可以肯定该驱动程序使用 QuickBooks SDK 来访问会计科目表。SDK 有一个特殊查询,用于查找已删除的实体(例如帐户),称为ListDeletedQuery. 作为一般规则,ListDeletedQuery如果您想找出已删除的内容,使用它会更有效。但是,由于会计科目表通常很小,因此扫描整个列表以查找缺失的元素可能是可以接受的。此外,ListDeletedQuery您使用的 SQL 驱动程序可能不会公开。

于 2012-07-13T22:22:09.240 回答