如何替换lambda的扩展方法中的字符串值

时间:2012-01-20 16:12:53

标签: c# asp.net-mvc-3 lambda

我想将{PKMvrMedsProductIssuesId'替换为类似x=>x.PKMvrMedsProductIssueId的内容或任何不基于字符串的内容。为什么?因为如果数据库人选择重命名该字段,我的程序将崩溃。

public static SelectList MvrMedsProductErrors(this SelectList Object)
{
    MedicalVarianceEntities LinqEntitiesCtx = new MedicalVarianceEntities();
    var ProductErrorsListBoxRaw =
    (
        from x in LinqEntitiesCtx.ViewLookUpProductIssuesErrorsNames
        select x
    );

    Object = new SelectList(ProductErrorsListBoxRaw, "PKMvrMedsProductIssuesId", "MvrMedsProductIssuesErrorsNames");

    return Object;
}

2 个答案:

答案 0 :(得分:1)

您正在使用SelectList。为了调用该构造函数,您必须有一个字符串。我们可以提出的任何更改仍然会导致字符串(从某处)传递到该构造函数。

好消息是:该字符串可以来自任何地方。它可以来自配置,来自数据库......你喜欢哪里。

答案 1 :(得分:0)

我不知道这里的确切上下文(究竟是什么“PKMvrMedsProductIssuesId”),但你可以使用这样的辅助方法:

public static string GetPropertyAsString<T>(Expression<Func<T, object>> expression)
{
    return GetPropertyInfo(expression).Name;
}

使用表达式获取字符串:

GetPropertyAsString<MyType>(x => x.MyTypeProperty);

('MyTypeProperty'是您的'PKMvrMedsProductIssuesId'任何'MyType'您的某个类型,您可能已经定义了您的属性)