'IQueryable' 不包含 'OrderByDescending' 的定义
'IQueryable' does not contain a definition for 'OrderByDescending'
为 where 子句中的 orderby 获取此错误。我这样做是因为以前,如果我没有定义 'people',我会在 return 上收到错误消息,因为人们会说名称 'people' 在当前上下文中不存在。我该如何解决这个问题?
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);
}
OrderByDescending()
是 IQueryable<T>
的扩展方法,而不是非泛型 IQueryable
.
的扩展方法
因此您需要将 people
声明为 IQueryable<Person>
。
因为确实没有这种方法。不过,有一个接受 IQueryable<T>
。使用
IQueryable<Person> people;
或任何合适的元素类型。
- 您必须在代码文件的开头有
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);
}
}
如前所述,您需要将 people
声明为 IQueryable<Person>
或从 People
table 返回的任何类型。如果你想使用隐式类型,你可以重新排列你的代码:
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)
}
为 where 子句中的 orderby 获取此错误。我这样做是因为以前,如果我没有定义 'people',我会在 return 上收到错误消息,因为人们会说名称 'people' 在当前上下文中不存在。我该如何解决这个问题?
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);
}
OrderByDescending()
是 IQueryable<T>
的扩展方法,而不是非泛型 IQueryable
.
因此您需要将 people
声明为 IQueryable<Person>
。
因为确实没有这种方法。不过,有一个接受 IQueryable<T>
。使用
IQueryable<Person> people;
或任何合适的元素类型。
- 您必须在代码文件的开头有
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); } }
如前所述,您需要将 people
声明为 IQueryable<Person>
或从 People
table 返回的任何类型。如果你想使用隐式类型,你可以重新排列你的代码:
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)
}