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

本文关键字:扩展 方法 字符串 lambda 何替换 替换 | 更新日期: 2023-09-27 18:20:51

我想将"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;
}

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

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

好消息是:这根绳子可以来自任何地方。它可以来自配置,也可以来自数据库。。。任何你喜欢的地方。

我不知道这里的确切上下文("PKMvrMedsProductIssuesId"到底是什么),但您可以使用这样的辅助方法:

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

使用表达式获取字符串:

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

("MyTypeProperty"是您的"PKMvrMedsProductIssuesId",任何"MyType"都是您可以定义属性的类型之一)