itdeveloper
itdeveloper

Reputation: 339

LINQ - dynamic orderby clause does not work

I have code like this:

//build query
var shops = (from p in dataContext.shops
let distance = dataContext.GetDistance(p.lat, p.lon, nearlat,nearlon)
                     join c in dataContext.shops_category on p.id equals c.poi_id
                     select new ShopsModel { p = p, distance = distance }
                         );
        }
//add dynamic orderby
if(somthig) 
  shops.OrderBy(distance)
else 
  shops.OrderBy(p.name)


//get records.
return shop.Take(30).ToList()

It's works fine except OrderBy. Generated SQL code does not contains orderby clause and the records are not sorted.

Any Idea? Thanks for help.

Upvotes: 5

Views: 809

Answers (2)

Rich O'Kelly
Rich O'Kelly

Reputation: 41757

OrderBy does not mutate the underlying data - it returns an enumerable with the appropriate ordering. You need to assign the result back to shops:

if (someCondition) 
{
  shops = shops.OrderBy(shop => shop.distance);
}
else 
{
  shops = shops.OrderBy(shop => shop.p.name);
}

Upvotes: 5

Lev
Lev

Reputation: 3924

try this:

Shops=shops.OrderBy(distance);

Upvotes: 1

Related Questions