如何在c#中使用带反射的Local?

时间:2014-12-02 20:11:22

标签: c# winforms entity-framework reflection

也许这是一件非常简单的事情,但我无法找到答案。我可以使用反射编写以下代码吗?

AdminEntities context= new AdminEntities(); 
datagridview1.DataSource = context.TABLENAME.Local.ToBindingList();

我尝试了以下内容:

BindingSource rtBindingSource = new BindingSource();
var TableName = cboSelectTable.Text.ToString();
AdminEntities context = new AdminEntities();
var rawData = context.GetType().GetProperty(TableName).GetValue(context, null);
var truncatedData = ((IQueryable<object>)rawData).Local.ToBindingList();
var binding = new BindingList<object>(truncatedData);
rtBindingSource.DataSource = new BindingSource { DataSource = binding };
datagridview1.DataSource = rtBindingSource;

但它会出错:&#39; System.Linq.IQueryable&#39;不包含&#39; Local&#39;的定义没有扩展方法&#39; Local&#39;接受类型为'System.Linq.IQueryable&#39;的第一个参数;可以找到

1 个答案:

答案 0 :(得分:0)

我从未对entity-framework做过多少工作,但显而易见的问题似乎是你试图在这里施放错误的对象:

var truncatedData = ((IQueryable<object>)rawData).Local.ToBindingList();

我认为rawData是一个DbSet,它没有实现IQueryable<T>接口。请注意,它确实实现了IQueryable,但这不是通用版本,也无论如何也无法从Local获取DbSet属性。将上述行更改为以下内容可能会有所帮助:

var truncatedData = ((DbSet)rawData).Local.ToBindingList();