Почему Skip and Take не работает при прохождении через метод?

Предположим, следующие коды:

IEnumerable<MyClass> MakeQuery()
{
  var query = from m in session.Linq<MyClass>()
              select m;
  return query;
}

List<MyClass> m1()
{
  return MakeQuery()
    .Skip(10)
    .Take(20)
    .ToList<MyClass>();
}

List<MyClass> m2()
{
  var query = from m in session.Linq<MyClass>()
              select m;

  return query
    .Skip(10)
    .Take(20)
    .ToList<MyClass>();
}

Предположим, что все запросы совпадают, кажется, что в m1(), Skip а также Take не работает. Действительно, как будто они не существуют все.

Почему это происходит и как это можно исправить?

Я использую linq-to-nhibernate, и эти методы используются для подкачки страниц. Благодарю.

1 ответ

Решение

Почему бы не использовать IQueryable для метода MakeQuery()?

IQueryable<MyClass> MakeQuery()
{
  return session.Linq<MyClass>();
}

Не то чтобы реальный запрос имел большой смысл. Но я оставлю это тебе.

Но это также единственная разница между m1() и m2()

Другие вопросы по тегам