问题描述
|
请有人可以帮我解决这个问题。
我有一个需要与自身连接的表。该表包含一个组合键。到目前为止,以下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
{
}