问题描述
有以下表格:
create table Table_A (
Id int primary key identity,Status int not null
)
create table Table_B (
Id int primary key identity,Value varchar(80) not null
)
create table Table_C (
Id int primary key identity,Time datetime not null
)
我想使用 lambda 表示法在 LINQ-to-sql 中编写以下查询:
select * from TABLE_A a
cross apply (
select top 1 c.Time from TABLE_B b
inner join TABLE_C c on c.Id = b.Id
where b.Id = a.Id
order by c.Time asc
) d
where a.Status = 10 and d.Time > '2021-03-09'
我该怎么做?
解决方法
不确定 LinqToSql 是如何翻译的,但是像 EF Core
和 linq2db
这样的现代 LINQ 提供程序应该将此 LINQ 查询翻译为 CROSS APPLY。
var date = new DateTime(2021,03,09);
var query =
from a in db.TABLE_A
from d in (
from b in db.TABLE_B
join c in db.TABLE_C on b.Id equals c.Id
where b.Id = a.Id
orderby c.Time
select new { b,c }
).Taske(1)
where a.Status == 10 && d.Time > date
select new { a,d.b,d.c };