2

はい、作成したいのですがList<T>、T はユーザー定義のデータ型、つまり POCO クラス、例えば UserProfile です。
理由: 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(eg) を取得した場合、どうすればこれを達成できますか。

構成詳細
entityFramework Version=5.0.0.0 データベース ファーストアプローチ
mvc 4
MvcJqGrid 1.0.9
.net FrameWork 4.5

4

2 に答える 2

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. リフレクション、Linq、DbSet
于 2013-03-11T12:06:26.590 に答える
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();
}
于 2013-03-11T15:01:37.173 に答える