使用带有bindingsource的Take()

时间:2014-10-09 10:11:15

标签: c# linq 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 个答案:

答案 0 :(得分: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是什么,但完全有可能在不使用反射的情况下获取数据 - 如果您能提供更多信息,我们可以提供更多帮助。