Подтвердить что ты не робот

Как получить вторую запись в linq для sql

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

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

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

4b9b3361

Ответ 1

Вы можете попробовать следующее:

var query=data.Skip(1).Take(1);

Ответ 2

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

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

Skip(1).Single()

Ответ 3

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

Ответ 4

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

.Take(2)

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

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

.Take(1)
.Skip(1).Take(1)

Ответ 5

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

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();

Ответ 6

Выберите верхнюю часть 2, затем выберите второй элемент.

Ответ 7

Collection.ElementAt(1)

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

Ответ 8

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

Ответ 9

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

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

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

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