也许这是一件非常简单的事情,但我无法找到答案。我可以使用反射编写以下代码吗?
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;的第一个参数;可以找到
答案 0 :(得分:0)
我从未对entity-framework
做过多少工作,但显而易见的问题似乎是你试图在这里施放错误的对象:
var truncatedData = ((IQueryable<object>)rawData).Local.ToBindingList();
我认为rawData
是一个DbSet
,它没有实现IQueryable<T>
接口。请注意,它确实实现了IQueryable
,但这不是通用版本,也无论如何也无法从Local
获取DbSet
属性。将上述行更改为以下内容可能会有所帮助:
var truncatedData = ((DbSet)rawData).Local.ToBindingList();