как получить вторую запись в linq to sql - PullRequest
15 голосов
/ 05 мая 2009

У меня есть таблица курсов валют. Мне нужно получить текущий курс и предыдущий курс, а затем сравнить результаты.

Я могу получить первую запись, используя FirstOrDefault.

Когда я использую ElementAtOrDefault, эта ошибка показывает «Оператор запроса« ElementAtOrDefault »не поддерживается». Как я могу получить вторую запись?

Ответы [ 9 ]

33 голосов
/ 05 мая 2009

Вы можете попробовать это:

var query=data.Skip(1).Take(1);
5 голосов
/ 27 июля 2012

Здесь подробно не упоминается: FirstOrDefault возвращает Element, Skip(1).Take(1) возвращает набор из 1 элемента; то есть тип, возвращаемый Skip(1).Take(1), равен IEnumerable, а FirstOrDefault - нет.

5 голосов
/ 27 июня 2012

Take () возвращает ноль, если элемента там нет (поэтому эквивалентно FirstOrDefault ()).

Если вы хотите, чтобы было сгенерировано исключение (потому что второго элемента там нет), как First (), тогда используйте:

Skip(1).Single()
3 голосов
/ 16 апреля 2013

Попробуйте эту простую реализацию, это может быть полезно

var query= (from p in db.Person where p.Person == person_id select p);
var firstResult = query.First();
var secondResult = query.Skip(1).Take(1).Single();
var thirdResult = query.Skip(2).Take(1).Single();
3 голосов
/ 05 мая 2009

Если вы используете

.Take(2)

вы получите первое и второе.

РЕДАКТИРОВАТЬ- Если вам нужно и первое, и второе, то вышеописанное будет более эффективным, чем повторный запрос:

.Take(1)
.Skip(1).Take(1)
1 голос
/ 27 сентября 2013
Collection.ElementAt(1)

извлечет вторую запись в коллекции.

1 голос
/ 05 мая 2009

Выберите top 2, затем выберите второй элемент.

0 голосов
/ 08 мая 2019

Как уже отмечал Джон Андерсон, Skip(1).Take(1) возвращает IEnumerable размера 1.

Чтобы получить саму вторую запись или null (т.е. без исключений), я использую следующее:

var secondEntry = collection?.Skip(1)?.FirstOrDefault();

Это может не работать в вашем конкретном случае, но может быть полезно для случаев использования других.

0 голосов
/ 05 мая 2009

Использовать метод .Skip (1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...