c# – 从数据库中选择不在大型集合中的id,提供的参数太多
发布时间:2020-12-15 21:23:51 所属栏目:百科 来源:网络整理
导读:我正在开发一个有两个数据库的应用程序. 我有一个对象,让我们称之为permit,它有一个id引用表的id列表,让我们在另一个数据库中调用那些任务. 我正在尝试运行以下查询: var listOfUsedIds = select taskid from Permit_Task;Select * from task where id not
我正在开发一个有两个数据库的应用程序.
我有一个对象,让我们称之为permit,它有一个id引用表的id列表,让我们在另一个数据库中调用那些任务. 我正在尝试运行以下查询: var listOfUsedIds = select taskid from Permit_Task; Select * from task where id not in (listOfUsedIds) 当我运行此代码时,我收到错误:
我无法运行子选择或任何事情因为NHibernate不允许我在两个数据库上执行此操作. 任何人都可以帮我解决这个问题吗? 解决方法using (var tx = session.BeginTransaction()) { session.CreateSQLQuery("CREATE TEMP TABLE usedIds (id INT)").ExecuteUpdate(); for (int index = 0; index < ids.Length; index++) { // TODO: batch this session.CreateSQLQuery("INSERT INTO usedIds VALUES (:p" + index + ")") .SetParameter("p" + index,id) .ExecuteUpdate(); } session.CreateSQLQuery("CREATE INDEX usedIds_idx ON usedIds (id)").ExecuteUpdate(); Batch batch; while((batch.List = session.CreateSQLQuery("SELECT id FROM tasks t WHERE 1 = (SELECT COUNT(*) FROM usedIds u WHERE u.id = t.id) LIMIT 10 OFFSET " + batch.Number).List<int>()).Count > 0) { var tasks = session.QueryOver<Task>() .Where(t => t.Id.IsIn(batch)) .List(); // Do something with the tasks } tx.Commit(); } 要么 public TaskMap() { Map(x => x.IsUsedCount).Formula("SELECT (SELECT COUNT(*) FROM usedIds u WHERE u.Id = Id)").LazyLoad(); } var tasks = session.QueryOver<Task>() .Where(t => t.IsUsedCount == 0) .List(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |