sql - Linq 自连接组合键

标签 sql linq key composite

请有人帮我解决这个问题。

我有一个需要连接到自身的表。该表包含一个组合键。到目前为止,以下 SQL 语句运行良好。

select * from releases as a inner join
(
select * from releases as r1
where id=50
) as x 
on (a.ParentSeriesId = x.SeriesId and a.ParentPeriod = x.Period) OR a.id=50

问题是如何将其转换为 linq。

到目前为止我得出的结果是

from a in Releases
join x in (
         (from r1 in Releases
         where
         r1.Id == 50
         select new {
         r1
         }))
         on new { a.ParentSeriesId, a.ParentPeriod, a.Id }
  equals new { ParentSeriesId = x.r1.SeriesId, ParentPeriod = x.r1.Period, Id = 50 }
select new{

}

但这会产生以下 SQL 语句

SELECT NULL AS [EMPTY]
FROM [Releases] AS [t0]
INNER JOIN [Releases] AS [t1] ON ([t0].[ParentSeriesId] = [t1].[SeriesId]) AND ([t0].[ParentPeriod] = [t1].[Period]) AND ([t0].[Id] = @p0)
WHERE [t1].[Id] = @p1

问题是我怎样才能使它成为我原来的 SQL 语句。谢谢!!

最佳答案

Linq 只支持等值连接,因为你有一个 OR 尝试下面的两个 'from' 子句

var xQuery = from r in Releases
             where r.Id == 50
             select r;

var query = from r in Releases
            from x in xQuery
            where (r.ParentSeriesId == x.SeriesId && r.ParentPeriod == x.Period) ||
                   r.Id == 50  //r.Id == x.Id
            select new
            {

            }

关于sql - Linq 自连接组合键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5661481/

相关文章:

sql - PostgreSQL RDS 在使用 dblink_connect() 时避免硬编码连接密码

C# Linq - 获取非空集合的对象

cryptography - RSA key 转换为 PEM 文件

c# - 是通用列表独特的

php - 如何将我的数组键替换为其他键中的值?

swift - Swift 4 中的 Smart KeyPaths 无法正常工作

mysql - VARCHAR 不接受包含非数字字符的字符串

mysql - 相关用户和帖子的复杂 MySQL 查询

sql - 确定/查找 Django 字段的底层 SQL 字段类型

sql-server - 使用 LINQ to SQL 忽略 SQL Server 中的重音