LINQ: конвертировать .Single() в нотацию запроса

Итак, я знаю нотацию запроса

var word = from s in stringList
           where s.Length == 3
           select s;

эквивалентно точечной нотации

var word = stringList
           .Where(s => s.Length == 3)
           .Select(s => s);

Но как преобразовать эту точечную нотацию в нотацию запроса?

var word = wordsList
           .Single(p => p.Id == savedId);

Я не мог найти много ресурсов в Google.

Ответ 1

Вы не можете. Многие функции LINQ не могут использоваться в синтаксисе запроса. В лучшем случае вы можете комбинировать оба и делать что-то вроде

var word = (from p in wordsList
            where p.Id == savedId
            select p).Single()

но в простом случае collection.Single(condition) "точечная нотация" кажется мне более читаемой.

Существует список ключевых слов, используемых LINQ для MSDN, вы можете видеть, какие функции интегрированы в язык из этого списка.

Ответ 2

Single не имеет точного эквивалента в нотации запроса.

Самое лучшее, что вы можете сделать, - это обернуть свой запрос в круглые скобки и позвонить. Соблюдайте сами.

Ответ 3

Единственное, что вы можете сделать, это:

var word = (from w in wordsList
            where w.Id == savedId
            select w).Single();

но Он не будет точно таким же. Он будет преобразован в

var word = wordsList
           .Where(p => p.Id == savedId)
           .Single();

Ответ 4

Single не является частью нотации запроса. Вы можете изменить свой первый пример следующим образом:

var word = (from s in stringList where s.Length == 3 select s).Single();