5

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.

itdeveloper
  • 339
  • 2
  • 3
  • 14

2 Answers2

5

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);
}
Rich O'Kelly
  • 41,274
  • 9
  • 83
  • 114
1

try this:

Shops=shops.OrderBy(distance);
Lev
  • 3,719
  • 6
  • 41
  • 56