使用字符串函数参数作为类类型

时间:2013-12-11 12:24:07

标签: c# asp.net linq asp.net-mvc-4

我的方法如下

public void UpdateDb(int id)
{
    var UpdateMyModel = db.CRM_OPP_DETAILS
        .Where(p=> p.ID == id)
        .FirstOrDefault();
    UpdateMyModel .IS_VALID = false;
    db.SaveChanges();
}

如何使用'ModelName字符串参数'作为模型类名。 IE浏览器。如下:

public void UpdateDb(string ModelName , int id)
{
    var UpdateMyModel = db.""ModelName ""
        .Where(p=> p.ID == id)
        .FirstOrDefault();
    UpdateMyModel.IS_VALID = false;
    db.SaveChanges();
}

1 个答案:

答案 0 :(得分:0)

你可以通过使用泛型和接口来实现这一点。 datacontext支持GetTable()方法。

您可以使用它,例如:

public void UpdateDb<T>(int id) where T : IUpdateDbInterface
{
    var UpdateTable = db.GetTable<T>()
                        .Where(p=> p.ID == id)
                        .FirstOrDefault();

    UpdateTable.IS_VALID = false;
    db.SaveChanges();
}

interface IUpdateDbInterface {
    int ID { get; set;}
    bool IS_VALID { get; set;}
}

要打电话:

UpdateDb<MyRecordType>(1234);

您的通用类型T将需要至少定义int IDbool IS_VALID的接口约束,否则通用代码将不知道其类型T是否具有这些字段。当然,您希望能够在所有表上运行的表都需要实现此接口。


如果您坚持使用字符串,请使用Type.GetType( ... )函数将字符串类名称转换为Type。然后你可以这样使用这个方法:

public void UpdateDb(Type type, int id)
{
    var UpdateTable = db.GetTable(type)

    .....
}

但是你仍然需要接口的东西来到你的属性。或者使用反射来处理所有事情,但这在使用ORM时毫无意义。