微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

交叉应用 LINQ-TO-SQL

如何解决交叉应用 LINQ-TO-SQL

有以下表格:

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 Corelinq2db 这样的现代 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 };

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。