【发布时间】:2014-09-04 18:55:04
【问题描述】:
我正在使用 VS Lightswitch ServerApplicationContext 来访问和修改 ApiController 中的 lightswitch 数据实体。
假设我有一个客户实体,我可以使用 linq 查询 lightswitch 数据库中的客户集合:
IEnumerable<Customer> customers = from custs in serverContext.DataWorkspace
.ApplicationData
.Customers
.GetQuery()
.Execute()
where c.AProperty == aProperty
select custs;
或
IEnumerable<Customer> customers =
serverContext.DataWorkspace
.ApplicationData
.Customers
.Where(c => c.AProperty == aProperty)
.Execute();
这非常有效。
但是,我有更多的实体和多个项目,每个项目中有不同的实体,我正在尝试创建一个库以允许我使用反射查询 ServerApplicationContext。
我使用反射来获取ServerApplicationContext 对象的属性,这使我可以访问EntitySet<T>,但我无法对其执行任何查询。
这是目前的代码:
Type t = serverContext.DataWorkspace.ApplicationData.GetType();
PropertyInfo[] pInfo = t.GetProperties();
foreach (var p in pInfo)
{
// p is equal to {Microsoft.LightSwitch.Framework.EntitySet`1[LightSwitchApplication.Customer] Customers}
MethodInfo mInfo = p.PropertyType.GetMethod("GetQuery");
var result = mInfo.Invoke(p.PropertyType, null) ; //<-- Error Here
}
返回的错误是:
“System.Reflection.TargetException”类型的异常发生在 mscorlib.dll 中,但未在用户代码中处理 附加信息:对象与目标类型不匹配。
有人对使用反射查询EntitySets(包括 where 子句)感到高兴吗?
【问题讨论】:
标签: c# linq reflection visual-studio-lightswitch