带有子查询的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语句来表示这个查询,那就太好了。
我认为您并不真正需要原始查询中的大小写。试试类似的东西:
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
仅在类别中唯一。