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
dt = (DataTable)sorted;

は無効なキャストです。正しい方法は、返された配列を を使用して dt に追加すること
dt.Rows.Add(query.ToArray().OrderByDescending(p=>p.Activity.DateCreated).toArray());です。
詳細については、Adding Data To Datatable を参照してください。

于 2013-01-07T09:06:20.193 に答える
3

OrderByDescending() は DataTable ではなく IEnumerable を返します

このリンクは、同じ質問と思われるものに答えます。 LINQ to DataTable 簡単かつ高速

于 2013-01-07T09:02:29.777 に答える
1

の戻り値の型がOrderByDescending だったDataTable場合、キャストは必要ありません。コンパイラは、コンパイル時にメソッドの戻り値の型を認識します。

ただしOrderByDescendingDataTableそれを構築する必要があります。

于 2013-01-07T09:02:26.403 に答える