是的,我想创建一个List<T>
,我的T是用户定义的数据类型,即POCO类,例如用户配置。
为什么:我正在使用MvcJqGrid,我想编写一个用于创建Json数据的通用代码,因此在运行时我会知道从哪个类(表)获取数据。
我的代码
public ActionResult TestGrid()
{
string spname = Request.Params["storedprocedurename"]; //spname = UserProfile
// i get this from the post data of MvcJqGrid i.e. user when create a jqgrid, in
// a view defines the table/spname from where data gets loaded in grid.
MyEntities _context = new MYEntities();
List<UserProfile> userProfiles = _context.UserProfiles.ToList<UserProfile>();
// here some code to create a json data and return
}
所以这个UserProfile我在这里硬编码,如果我在Request.params中获得RoleMaster(例如),该怎么办? 那么我怎样才能实现这一点。
配置详情
entityFramework Version = 5.0.0.0数据库第一种方法
mvc 4
MvcJqGrid 1.0.9
.net FrameWork 4.5
答案 0 :(得分:1)
如果spName是一个字符串,您可以通过以下方式获取类型:
Type genericType = Type.GetType(string.Format("YourNamespace.{0}", spName));
然后userProfiles
下面的List<UserProfile>
类型为var method = _context.GetType().GetMember("Set")
.Cast<MethodInfo>()
.Where(x => x.IsGenericMethodDefinition)
.FirstOrDefault();
var genericMethod = method.MakeGenericMethod(genericType);
dynamic invokeSet = genericMethod.Invoke(_context, null);
// this list will contain your List<UserProfile>
var userProfiles = Enumerable.ToList(invokeSet);
,使用代码:
{{1}}
欲了解更多信息:
答案 1 :(得分:0)
这样做:
public ActionResult Index()
{
string spname = Request.Params["storedprocedurename"];
Type t = typeof(MYEntities)
.Assembly
.GetType(string.Format("<namespace>.{0}", spname);
dynamic instance = Activator.CreateInstance(t);
return View(ListData(instance));
}
private List<T> ListData<T>(T instance)
where T : class
{
MYEntities context = new MYEntities();
return context.Set<T>().ToList();
}