Linq,跨上下文日期比较查询

时间:2011-11-11 12:37:22

标签: linq dbcontext

基本前提

我希望能够比较两个表之间的日期,这两个表存储在不同的数据库中,它们位于不同的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...
}

这会抛出一个错误:“查询包含对在不同数据上下文中定义的项的引用。”

问题

使用大型数据集进行这样的跨数据库查询的最佳方法是什么,并进行日期比较。将两个数据库移动到同一个上下文中是否可行?

0 个答案:

没有答案