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

C# 带有子查询的LINQ to SQL-CASE语句,c#,linq-to-sql,C#,Linq To Sql,我在尝试用LINQ表示以下SQL(返回我想要的结果)时遇到问题: 记录表中的每一行都有一个唯一的RecordID。多个RecordID可以与CategoryID 2的RecordGroupID关联,但其中只有一个具有PrimaryRecord字段值1 给定下表中的数据,我希望的输出是RecordID=1,FooID=3,即给定RecordGroupID的RecordID是PrimaryRecord,但给定行的FooID与我的Where子句匹配 RecordID RecordGroupID

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

记录表中的每一行都有一个唯一的RecordID。多个RecordID可以与CategoryID 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;

编辑:在join中添加了
CategoryId
,假设
RecordGroupId
仅在一个类别中是唯一的。

什么是
t.PrimaryRecord
<“代码>t未在您的查询中的任何位置定义。@恶心-抱歉,是输入错误。”。现在已修复。@恶心-只是想对你发布并删除的答案表示感谢。虽然我重写了SQL,但如果没有option.NP,那么看看如何实现它是非常有用的。接受的答案比我发布的一对一LINQ声明要好。谢谢!有趣的是,我刚刚想出了如何重写我的SQL查询,以完成与LINQ语句类似的工作。这个查询一开始感觉不太对劲,但已经有12个多月没有写过了。
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;