Вы можете использовать тот факт, что логические значения сортируются как [false, true], поэтому следующий запрос сначала отсортирует все совпадения не , равные en-GB
, а затем en-GB
.
var result = (from x in variants
where x.CultureID == cultureID || x.CultureID == "en-GB"
orderby x.CultureID == "en-GB"
select x).First();
Этот запрос выдаст ошибку, если для данного ключа даже не существует записи "en-GB" (First
требует хотя бы одну запись), но, как вы сказали, она всегда существует.Если вы не уверены, что это так, используйте FirstOrDefault
.
Обратите внимание, что многие поставщики LINQ поддерживают эту идиому, ее нельзя использовать только для IEnumerable / Lists.Таким образом, вы можете даже объединить фильтр по ключу и культуре как часть запроса LINQ, так что вы можете позволить базе данных разобраться за вас, и вы не получите полный список переводов назад, только тот, который вам нужен:
var result = (from x in db.Translations
where x.Key == someKey
&& (x.CultureID == cultureID || x.CultureID == "en-GB")
orderby x.CultureID == "en-GB"
select x).First();