Ag Long
Ag Long

Reputation: 85

How to make one item order first in IQueryable

I have a linq to entities with a return of IQueryable. I need to make self join (e.empid == empid) to be first item. How can I do it?

public IQueryable<vmEmp> GetEmpUnder(string empid)
{
    var dataContext = new Entities();         
    var Emp = from e in dataContext.lstEmp.Where(e => e.Supervisor == empid || e.empid == empid)
                select new vmEmp
                {
                    EmpId = e.empid,
                    Name = e.LName + ", " + e.FName
                };

    var under = Emp.ToList().Where(e => DirectCount(e.EmpId) > 0);
    Emp = under.AsQueryable<vmEmp>();

    return Emp;
}

Upvotes: 1

Views: 495

Answers (1)

p.s.w.g
p.s.w.g

Reputation: 149020

You can use orderby with Booleans but note that it orders false before true, so you need to use descending. Also note you can combine that Where into the rest of the query:

var Emp = from e in dataContext.lstEmp
          where e.Supervisor == empid || e.empid == empid
          orderby e.empid == empid descending
          select new vmEmp
          {
              EmpId = e.empid,
              Name = e.LName + ", " + e.FName
          };

Or you can make two queries and concatenate them together, like this:

var Emp = 
    (from e in dataContext.lstEmp
     where e.Supervisor == empid
     select new vmEmp
     {
         EmpId = e.empid,
         Name = e.LName + ", " + e.FName
     }).Concat(
     from e in dataContext.lstEmp
     where e.empid == empid
     select new vmEmp
     {
         EmpId = e.empid,
         Name = e.LName + ", " + e.FName
     });

Upvotes: 3

Related Questions