LINQ在不相等的键上联接

本文关键字:不相等 LINQ | 更新日期: 2023-09-27 18:29:32

我需要将此SQL查询转换为LINQ

SELECT * 
FROM Table1 t1 
JOIN Table2 t2 ON t1.LogDate >= t2.StartDate AND t1.LogDate <= t2.EndDate

以上SQL查询的LINQ应该是什么?

LINQ在不相等的键上联接

LINQ只支持对相等键的联接,我建议使用交叉联接。根据您的查询优化器,它可能会转换为内部联接

from t1 in Table1
from t2 in Table2
where t1.LogDate >= t2.StartDate && t1.LogDate <= t2.EndDate
select new { t1, t2 }

如果您要连接这些表,希望您能提前考虑,并在Table2到Table1中使用外键引用设计数据库。假设您这样做,Lambda表达式将如下所示:

表1表2

PK->ID FK->T1_ID

db.Table1.Join(db.Table2.ToList(),
               t1 => t1.ID,
               t2 => t2.T1_ID,
               (t1, t2) => new { Table1, Table2})
         .Where(result => result.Table1.LogDate >= result.Table2.StartDate &&
                          result.Table1.LogDate <= result.Table2.EndDate);