LinQ 连接查询具有相同模型的两个表

问题描述 投票:0回答:1

我的数据库中有两个具有相同结构的表。 这些表有很多列,类型和名称完全相同。 假设它们的名称是 OldTable 和 NewTable。 在我的项目中,我有这些表的一个模型。 我需要在表上执行内部联接。 当我尝试时,我使用同一个表进行 SQL 查询,例如:

Select column1 from OldTable oldData
Inner Join OldTable newData on oldData.Column1 = newData.Column1

出了什么问题?

我使用的示例代码:

var oldCtx = _oldDataSource.DataContext.Rows;
var newCtx = _newDataSource.DataContext.Rows;

var query = from oldData in oldCtx
            join newData in newCtx
            on new { oldData.Column1, oldData.Column2, oldData.Column3, oldData.Column4, oldData.Column5 }
            equals new { newData.Column1, newData.Column2, newData.Column3, newData.Column4, newData.Column5 }
            where oldData.StartTime >= dateStart && oldData.StartTime < dateStart + timeSpan
            select newData;

var newCdrs = query.ToList();

查询结果为:


DECLARE @dateStart TimeStamp -- DateTime
SET     @dateStart = TIMESTAMP '2024-01-22 15:54:33.000000'
DECLARE @CallStartTime TimeStamp -- DateTime
SET     @CallStartTime = TIMESTAMP '2024-01-22 15:54:34.000000'

SELECT
    newData.Column1,
    newData.Column2,
    newData.Column3,
    newData.Column4,
    newData.Column5,
.....

FROM
    DEV3.OldTable  oldData
        INNER JOIN DEV3.OldTable newData ON (oldData.COLUMN1 = newData.COLUMN1 OR oldData.COLUMN1 IS NULL AND newData.COLUMN1 IS NULL) AND (oldData.COLUMN2 = newData.COLUMN2 OR oldData.COLUMN2 IS NULL AND newData.COLUMN2 IS NULL) AND (oldData.COLUMN3 = newData.COLUMN3 OR oldData.COLUMN3 IS NULL AND newData.COLUMN3 IS NULL) AND (oldData.COLUMN4 = newData.COLUMN4 OR oldData.COLUMN4 IS NULL AND newData.COLUMN4 IS NULL) AND (oldData.COLUMN5 = newData.COLUMN5 OR oldData.COLUMN5 IS NULL AND newData.COLUMN5 IS NULL)
WHERE
    oldData.START_TIME >= :dateStart AND oldData.START_TIME < :CallStartTime

但我预料到了

JOIN DEV3.NewTable

linq join linq2db
1个回答
0
投票

linq2db
中,对于这种情况,您可以使用
TableName
SchemaName
ServerName
扩展。它们是为
ITable
接口定义的。

var query = from oldData in oldCtx
            join newData in newCtx.TableName("NewData")
            on new { oldData.Column1, oldData.Column2, oldData.Column3, oldData.Column4, oldData.Column5 }
            equals new { newData.Column1, newData.Column2, newData.Column3, newData.Column4, newData.Column5 }
            where oldData.StartTime >= dateStart && oldData.StartTime < dateStart + timeSpan
            select newData;
© www.soinside.com 2019 - 2024. All rights reserved.