基本前提
我希望能够比较两个表之间的日期,这两个表存储在不同的数据库中,它们位于不同的DbContexts上)。当数据库A中的DateInput更改为比数据库B的DateInput值更新的日期时;我希望能够做一些事情。
数据库
数据库A,表A列:
IDA: int pk
DateInput: DateTime
数据库B,表B列:
IDB: int pk
IDA: int fk
DateInput: DateTime
我目前正在做什么
DbContext dba = new DbContextA();
DbContext dbb = new DbContextB();
// Get all rows from db.A
// There are a lot of rows in db.A and db.B, over 50k.
List<DBRowA> dbRowsAList = dba.TableA.ToList();
// This foreach loop is the bottle neck.
foreach (DBRowA dbRowA in dbRowsAList)
{
// Get all rows from db.B that are associated with db.A via pk-fk
// AND only get rows where the DateTime in db.A.DateInnput > db.B.DateInput
if ((from dbRowB in dbb.TableB
where dbRowB.IDA == dbRowA.IDA && dbRowA.DateInput > dbRowB.DateInput
select dbRowB).ToList().Count >= 1)
{
// entry in db.A.A.DateInput is a newer (greater) date than in db.B.B.DateInput
// Do stuff...
}
}
问题
这里的问题是,通过第一个dbcontext中的entrys进行foreach循环需要很长时间,并将它们与第二个dbcontext进行比较。每张表有大约5万行。
我希望能做什么
DbContext dba = new DbContextA();
DbContext dbb = new DbContextB();
// Get all rows from db.A, delayed execution variable
// Get all rows from db.B that are associated with db.A via pk-fk
// AND only get rows where the DateTime in db.A.DateInnput > db.B.DateInput
List<DBRowA> resultingDbRowsA =
(from dbRowB in dbb.TableB
from dbRowA in dba.TableA
where dbRowB.IDA == dbRowA.IDA && dbRowA.DateInput > dbRowB.DateInput
select dbRowA).ToList();
foreach(DBRowA resultDbRowA in resultingDbRowsA)
{
// Do stuff...
}
这会抛出一个错误:“查询包含对在不同数据上下文中定义的项的引用。”
问题
使用大型数据集进行这样的跨数据库查询的最佳方法是什么,并进行日期比较。将两个数据库移动到同一个上下文中是否可行?