【问题标题】:LINQ join on non equal keys不相等键上的 LINQ 连接
【发布时间】:2014-11-07 17:42:07
【问题描述】:

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

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

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

【问题讨论】:

标签: c# sql .net linq


【解决方案1】:

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

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

【讨论】:

  • @VDohnal - 它很可能会被转换成inner join
【解决方案2】:

希望如果您要加入这些表,您会提前考虑并使用表 2 到表 1 中的外键引用设计您的数据库。假设你这样做了,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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    相关资源
    最近更新 更多