"IQueryable" does not contain a definition for "OrderByDescending"

Getting this error for the orderby parameter in where. I did this because earlier, if I didn’t define “people,” I would get an error when returning for people saying that the name “people” does not exist in this current context. How to fix it?

 public JsonResult PersonsList(string birthyear)
 {
     TutorialDBContext db = new TutorialDBContext();
     var NumericYear = Convert.ToInt32(birthyear);
     IQueryable people;

     if (birthyear == "All")
     {
          people = from m in db.persons
                   select m;

          people = people.OrderByDescending(s => s.birthdate);
     }
     else
     {
          people = from m in db.persons
                   where m.birthdate.Year >= NumericYear
                   where m.birthdate.Year <= (NumericYear + 9)
                   select m;
     }

     return Json(people, JsonRequestBehavior.AllowGet);
 }
+4
source share
4 answers

Because there is no such method. There is one that accepts IQueryable<T>. Use

IQueryable<Person> people;

or any type of item will be suitable.

+5
source

OrderByDescending()is an extension method , not a general one . IQueryable<T>IQueryable

, people IQueryable<Person>.

+4

people IQueryable<Person> - , people. , :

var people = from m in db.persons
             select m;
if (birthyear == "All")
{
    people = people.OrderByDescending(s => s.birthdate);
}
else
{
     people = people.Where(p => p.birthdate.Year >= NumericYear
                             && p.birthdate.Year <= NumericYear + 9)
}
+2
  • using System.Linq; .
  • IQueryable people; IQueryable<Person> people;
  • All birthyear , , var NumericYear = Convert.ToInt32(birthyear);
  • public JsonResult PersonsList(string birthyear)
    {
        using (var db = new TutorialDBContext())
        {
            IQueryable<Person> people;
    
            if (birthyear == "All")
            {
                people = db.persons.OrderByDescending(s => s.birthdate);
            }
            else
            {
                var NumericYear = Convert.ToInt32(birthyear);
                people = from m in db.persons
                    where m.birthdate.Year >= NumericYear
                    where m.birthdate.Year <= (NumericYear + 9)
                    select m;
            }
    
            return Json(people, JsonRequestBehavior.AllowGet);
        }
    }
    
+1

Source: https://habr.com/ru/post/1619516/


All Articles