1

我有以下功能 -

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;
}
4

3 回答 3

3

OrderByDescending() 返回 IEnumerable 而不是 DataTable

这个链接回答了似乎是同一个问题。 LINQ to DataTable 轻松快速

于 2013-01-07T09:02:29.777 回答
3
dt = (DataTable)sorted;

是无效的演员表。正确的方法是使用 . 将返回的数组添加到 dt 中
dt.Rows.Add(query.ToArray().OrderByDescending(p=>p.Activity.DateCreated).toArray());您可以在将数据添加到数据表
中找到更多信息

于 2013-01-07T09:06:20.193 回答
1

如果返回类型OrderByDescending 是,DataTable则不需要强制转换。编译器在编译时就知道方法返回类型的类型。

但是OrderByDescending不返回DataTable您需要构造它。

于 2013-01-07T09:02:26.403 回答