#sql #linq #key #composite
#sql #linq #Клавиша #составной
Вопрос:
пожалуйста, кто-нибудь мог бы помочь мне с этим.
У меня есть таблица, которую необходимо присоединить к самой себе. Таблица содержит составной ключ. Пока что следующая инструкция 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. Спасибо!!
Комментарии:
1. В запросе linq ваше условие соединения не совсем корректно, оно будет иметь эффект ‘И’ между условиями. Мой комментарий не является ответом на вопрос, просто предложение
Ответ №1:
Linq поддерживает только равносоединения, поскольку у вас есть ИЛИ попробуйте следующее с двумя предложениями ‘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 amp;amp; r.ParentPeriod == x.Period) ||
r.Id == 50 //r.Id == x.Id
select new
{
}
Комментарии:
1. Спасибо nasmifive. Я попробую, но, думаю, это единственный способ. Я вернусь с любым результатом.