Entity Framework и динамический порядок по заявлениям - PullRequest
6 голосов
/ 13 декабря 2011

Я изо всех сил пытался заставить это работать.Я хочу, чтобы оператор EF занял столбец для сортировки.Мое первоначальное утверждение было таким:

var Query = from P in DbContext.People
                   where P.BusinessUnits.Any(BU =>BU.BusinessUnitID == businessUnitId)
                   orderby P.LastName
                   select P;

И я изменил это на следующее:

var Query = from P in DbContext.People
                   where P.BusinessUnits.Any(BU =>BU.BusinessUnitID == businessUnitId)
                   orderby sortField
                   select P;

Где sortField - это столбец, по которому мы хотим отсортировать, и это строка, т.е.LastName.Однако он не работает, не выполняет сортировку, и выведенная строка SQL совершенно неверна.Кто-нибудь получал это раньше?

Ответы [ 2 ]

14 голосов
/ 13 декабря 2011

вы можете попробовать передать выражение в ваш метод следующего типа:

Expression<Func<Person, object>> expr = p => p.LastName;

и затем использование расширений linq вместо выражений linq ...

var Query = 
 DbContext.People
 .Where(P => P.BusinessUnits.Any(BU =>BU.BusinessUnitID == businessUnitId))
 .OrderBy(expr)
 .ToList();
4 голосов
/ 13 декабря 2011

Ваша сортировка не работает, потому что вы сортируете по строковому литералу. Это не незаконно, но и не особенно полезно. Вам необходимо предоставить поле сортировки через API IQueryable<T>, например, так:

var q = from P in DbContext.People
   where P.BusinessUnits.Any(BU =>BU.BusinessUnitID == businessUnitId)
   orderby P.LastName
   select P;
if ("sortField".Equals("FirstName"))
    q = q.OrderBy(p => p.FirstName);
else if ("sortField".Equals("LastName"))
    q = q.OrderBy(p => p.LastName);
else if ("sortField".Equals("Dob"))
    q = q.OrderBy(p => p.Dob);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...