LINQ连接非等号键

时间:2014-11-07 17:42:07

标签: c# sql .net linq

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

希望如果您要加入这些表,那么您可以考虑使用Table2到Table1中的外键引用为您设计数据库。假设你这样做,Lambda表达式如下:

表1表2

PK-&GT; ID FK-&gt; 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);