Afshar
Afshar

Reputation: 11523

Why Skip and Take does not work when passing through a method?

Suppose following codes:

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

Supposing all queries are same, it seems that in m1(), Skip and Take does not work. Indeed its like they do not exist all.

Why this happens and how can be fixed?

I'm using linq-to-nhibernate and this methods are used for paging. Thanks.

Upvotes: 0

Views: 1973

Answers (1)

Claus J&#248;rgensen
Claus J&#248;rgensen

Reputation: 26336

Why not use IQueryable for the MakeQuery() method?

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

Not that the actual query makes a lot of sense. But I'll leave that to you.

But this is also the only difference between m1() and m2()

Upvotes: 2

Related Questions