Linq to Join 表基于两者之间的日期

Posted

技术标签:

【中文标题】Linq to Join 表基于两者之间的日期【英文标题】:Linq to Join tables based on date in between 【发布时间】:2019-07-23 00:58:10 【问题描述】:
CREATE Table A
(StartDate DATETIME, 
EndDate DATETIME,
Price float)

CREATE Table B
(EfectiveDate DATETIME,
Item VARCHAR(50))

INSERT INTO A values ('01/20/2016', '11/12/2017', '2.40')
INSERT INTO A values ('11/13/2017', '03/02/2019', '1.20')
INSERT INTO A values ('03/03/2019', '05/22/2019', '2.20')
INSERT INTO A values ('05/23/2019', '07/23/2019', '1.90')

INSERT INTO B values ('06/21/2019' 'Pen')
INSERT INTO B values ('01/01/2018','Pencil')

我需要根据表 B 中的生效日期将这 2 个表组合起来,取消 LINQ 应该在表 A 中的 StartDate 和 EndDate 之间

类似...

Select * FROM B
INNER JOIN A on B.EfectiveDate BETWEEN A.StartDate AND A.EndDate

from tblB in B 
join tblA in A on tblB.B.EfectiveDate BETWEEN tblA.StartDate AND tblA.EndDate

显然我上面的 LINQ 查询是错误的,但我希望你明白。

【问题讨论】:

【参考方案1】:

你不能专门加入BETWEEN条件

您可以尝试使用笛卡尔积,然后根据适当的条件进行过滤:

from tblB in B
from tblA in A
where tblB.EfectiveDate >= tblA.StartDate && tblB.EfectiveDate <=  tblA.EndDate
select new 
    StartDate = tblA.StartDate,
    EndDate = tblA.EndDate,
    Price = tblA.Price,
    EfectiveDate = tblB.EfectiveDate,
    Item = tblB.Item
;

【讨论】:

以上是关于Linq to Join 表基于两者之间的日期的主要内容,如果未能解决你的问题,请参考以下文章

LINQ to SQL语句之Join

linq to entities查询使用大于小于匹配数据库字符串日期方法

SQL:LEFT JOIN 基于另一个表的生效日期

在Linq To Entities中使用多个列联接表

SQL查询选择年份在两个日期之间的行

linq to sql 查询两者之间的语句怎么写,例如7月份到8月份的数据