2014-10-09 86 views
0

如何使用Take()以下代碼?使用帶綁定的Take()

var context = new Entities(); 
BindingSource bi = new BindingSource(); 
var TableName = cboSelectTable.Text.ToString();  
bi.DataSource = context.GetType().GetProperty(TableName).GetValue(context, null); 

謝謝。

回答

1

您需要將GetValue()的結果轉換爲適當的值。它總是會是類型的序列嗎?如果是這樣,隨着C#4和.NET 4,你可以使用通用的協方差:

var context = new Entities(); 
var tableName = cboSelectTable.Text.ToString();  
var rawData = context.GetType().GetProperty(TableName).GetValue(context, null); 
var truncatedData = ((IQueryable<object>) rawData).Take(100); 
var source = new BindingSource { DataSource = truncatedData }; 

您可能還需要調用ToList()Take(100)後,兌現的查詢結果。

(這是假設它會IQueryable<T> ...如果它只是只是一個IEnumerable<T>,投給代替。)

目前還不清楚是什麼Entities是,但它是完全有可能有辦法在不使用反射的情況下獲取數據 - 如果您可以提供更多信息,我們可以提供更多幫助。

+0

實際上,我正在使用實體框架,完整的代碼如下所示:var context = new AdminEntities(); BindingSource bi = new BindingSource(); var TableName = cboSelectTable.Text.ToString(); bi.DataSource = context.GetType()。GetProperty(TableName).GetValue(context,null); dgvLoadTable.DataSource = bi; dgvLoadTable.Refresh(); – feather 2014-10-09 10:55:01

+1

@feather:不,不要在評論中發佈一些代碼。但是如果你能告訴我們什麼是Entities()繼承的,那將會有幫助... – 2014-10-09 10:55:48

+0

這是一個使用數據庫表建立的實體模型 – feather 2014-10-09 10:56:59