Я работаю с коллегой, и мы пытаемся воспроизвести следующий SQL-запрос, используя LinqToEntities (Entity Framework v4.0)
SELECT t1.*
FROM [dbo].LocaleStringResource AS t1
LEFT OUTER JOIN [dbo].LocaleStringResource AS t2
ON (t1.ResourceName = t2.ResourceName AND t1.AccountId < t2.AccountId)
WHERE t2.ResourceName IS NULL;
По сути, это говорит о том, что возвращайте нам только самые высокие идентификаторы AccountId, где есть более одного соответствующего ResourceName. У нас это пока...
localeStringResource = from e1 in localeStringResource
join e2 in localeStringResource
on new { e1.ResourceName, e1.AccountId } equals new { e2.ResourceName, e2.AccountId }
where e2.ResourceName == null
select e1;
Но мы, похоже, не можем решить, как добиться эквивалента меньшего, чем (‹) в ЛЕВОМ ВНЕШНЕМ СОЕДИНЕНИИ?
ON (t1.ResourceName = t2.ResourceName AND t1.AccountId < t2.AccountId)
Может ли кто-нибудь посоветовать, возможно ли это или мы лаем не по тому дереву? Мы попытались максимально упростить исходный запрос, надеясь, что это упростит построение эквивалентного запроса LinqToEntities.
Примечание:
AccountId
не уникален. У нас есть столбец Identity
Id
в таблице LocalResourceString
. Однако существует уникальное ограничение как для AccountId
, так и для ResourceName
.
AccountId
,ResourceName
} уникальна. Проблема может возникнуть, если имеется несколько отдельных записей с одинаковымиAccountId
иResourceName
, и в этом случае сокращенный запрос вернет только одну из них. Здесь не похоже, что это проблема. 08.10.2012