带有子查询的LINQ to SQL-CASE语句

本文关键字:to SQL-CASE 语句 LINQ 查询 | 更新日期: 2023-09-27 18:29:48

我在LINQ中尝试表示以下SQL(返回我想要的结果)时遇到了问题:

select 
    case r.CategoryID
    when 2 then
        case r.PrimaryRecord
            when 1 then r.RecordID
            else (select RecordID from Record where RecordGroupID = r.RecordGroupID and PrimaryRecord = 1)
        end
    else
        r.RecordID
    end
    as RecordID
    , r.FooID
from Record r
where 
    r.FooID = 3

"记录"表中的每一行都有一个唯一的RecordID。多个RecordID可以与类别ID 2的RecordGroupID关联,但其中只有一个的PrimaryRecord字段值为1。

给定下表的数据,我想要的输出是RecordID=1,FooID=3,即给定RecordGroupID的RecordID是PrimaryRecord,但给定行的FooID与我的Where子句匹配。

RecordID    RecordGroupID    PrimaryRecord    CategoryID    FooID  
1           1                1                2             1
2           1                0                2             1
3           1                0                2             3

我很欣赏SQL本身可能不是世界上最高效的SQL,但它是我能想到的最好的SQL。

如果有人能帮我创建LINQ语句来表示这个查询,那就太好了。

带有子查询的LINQ to SQL-CASE语句

我认为您并不真正需要原始查询中的大小写。试试类似的东西:

var matchingRecords = from r in Records
                      where r.FooId = fooId && r.CategoryId == catId && r.RecordGroupId == groupId
                      join r2 in Records on r.RecordGroupId == r2.RecordGroupId && r.CategoryId == r2.CategoryId && r2.PrimaryRecord 
                      select r2;

编辑:在联接中添加CategoryId,假设RecordGroupId仅在类别中唯一。