0

如何使用Take()以下代码?

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

谢谢。

4

1 回答 1

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()afterTake(100)来具体化查询结果。

(这是假设它将一个IQueryable<T>... 如果它只是一个IEnumerable<T>, 则改为那个。)

目前尚不清楚是什么Entities,但完全有可能有一种方法可以在不使用反射的情况下获取数据 - 如果您能给我们更多信息,我们可以提供更多帮助。

于 2014-10-09T10:46:17.403 回答