2013-01-07 52 views
1

我有以下功能 -如何將var轉換爲DataTable?

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; 
} 
+1

找到更多的信息爲什麼你不能測試它? –

+1

就這樣,這將不起作用,因爲'sorted'將會正確輸入'IQueryable '。我相信你應該在消費方面更好地排序結果,而不是在數據表本身內。排序是表示層的功能,而不是數據層 –

+0

檢查這些解決方案[這裏](http://www.dreamincode.net/forums/topic/85368-c%23-convert-object-array-into-datatable/)。 希望這會有所幫助。 –

回答

2
dt = (DataTable)sorted; 

是一個無效的轉換。正確的方法是使用
dt.Rows.Add(query.ToArray().OrderByDescending(p=>p.Activity.DateCreated).toArray());將返回的數組添加到dt中。
你可以在Adding Data To Datatable

+0

謝謝@prthrokz。請參閱更新。現在這個工作嗎? – RTRokzzz

+1

首先從Person創建一個DataRow。 DataRow dr = dt.NewRow();然後在該行添加必要的值,dr [「Name」] = p.Name; dr [「Dept」] = p.Employee.Department等。最後dt.Rows.Add(dr);所有這些都發生在foreach循環中。 – prthrokz

+0

謝謝@prthrokz。我遵循你的方式。但是,我無法測試它,但我認爲,它現在可以工作。 – RTRokzzz

1

如果OrderByDescending返回類型爲DataTable則不需要投。編譯器在編譯時知道方法返回類型的類型。

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