我有以下功能-
public static DataTable getDetails(PersonContext context)
{
DataTable dt = new DataTable();
IQueryable<Person> query = from p in context.Persons.Include("Employee")
.Include("Manager")
.Include("Activity")
where p.Activity.IsActive
select p;
var sorted = query.ToArray().OrderByDescending(p=>p.Activity.DateCreated);
dt = (DataTable)sorted;
return dt;
}
我不能测试它。我的问题是,这个函数是否有效。如果没有,我应该做什么改变?
public static DataTable getDetails(PersonContext context)
{
DataTable dt = new DataTable("Details");
dt.Columns.Add("Name");
dt.Columns.Add("Department");
dt.Columns.Add("IsManager");
IQueryable<Person> query = from p in context.Persons.Include("Employee")
.Include("Manager")
.Include("Activity")
where p.Activity.IsActive
select p;
var sorted = query.ToArray().OrderByDescending(p=>p.Activity.DateCreated);
foreach(Person p in sorted)
{
dt.Rows.Add(p.Name, p.Employee.Department,p.Manager.IsManager);
}
return dt;
}
dt = (DataTable)sorted;
是无效的强制转换。正确的方法是使用
将返回的数组添加到dt中。dt.Rows.Add(query.ToArray().OrderByDescending(p=>p.Activity.DateCreated).toArray());
.
您可以在添加数据到数据表
orderbydescent()返回一个IEnumerable而不是DataTable
这个链接似乎回答了同样的问题。
如果OrderByDescending
的返回类型为 DataTable
,则不需要强制转换。编译器在编译时知道方法的返回类型。
但是OrderByDescending
不返回DataTable
,你需要构造它