Я использую MySQL БД с ядром ef, все работает нормально, но следующий запрос не возвращает ожидаемый результат.
var query = _context.ServiceData.
Include(x => x.Country)
.Include(x=>x.Country.CountryLocale)
.Where(x=>x.Country.CountryLocale.Any(l=>l.Locale == "en-US"));
После выполнения и выполнения
query.First().Country.CountryLocale.Count // Returns count of greater than 1 when expected count is 1
Таблица Имеет только 2 записи, и вышеупомянутые тянет оба, когда ожидается только 1.
Макет таблицы
Id Name Locale
1 Test en-US
2 Test en-GB
Все примеры, которые я видел, предлагают делать это так, как я, поэтому не уверен чего мне не хватает.
Вот sql, сгенерированный выше Linq
SELECT `a`.`Id`, `a`.`ServiceDataCode`, `a`.`CountryId`, `a`.`Enabled`, `a`.`LastUpdated`, `a`.`TimezoneId`, `c`.`Id`, `c`.`DialingCode`, `c`.`Enabled`, `c`.`IsoNumeric`, `c`.`IsoThreeLetterCode`, `c`.`IsoTwoLetterCode`, `c`.`LastUpdated`, `c0`.`Id`, `c0`.`IsoTwoLetterCode`, `c0`.`LastUpdated`, `c0`.`Locale`, `c0`.`Name`
FROM `ServiceData` AS `a`
INNER JOIN `CountryData` AS `c` ON `a`.`CountryId` = `c`.`Id`
LEFT JOIN `CountryLocale` AS `c0` ON `c`.`IsoTwoLetterCode` = `c0`.`IsoTwoLetterCode`
WHERE EXISTS (
SELECT 1
FROM `CountryLocale` AS `c1`
WHERE (`c`.`IsoTwoLetterCode` = `c1`.`IsoTwoLetterCode`) AND (`c1`.`Locale` = 'en-US'))
ORDER BY `a`.`Id`, `c`.`Id`, `c0`.`Id`
Я думаю, хранимая процедура - это еще один вариант, но я хотел обойтись без него.