Как заменить строковое значение в методе расширения для лямбды - PullRequest
0 голосов
/ 20 января 2012

Я хотел бы заменить «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 ]

1 голос
/ 20 января 2012

Вы используете SelectList.Чтобы вызвать этот конструктор, у вас должна быть строка.Любое изменение, которое мы можем предложить, все равно приведет к тому, что строка (откуда-то) будет передана в этот конструктор.

Хорошая новость: эта строка может прийти откуда угодно.Он может прийти из конфига, из базы данных ... где угодно.

0 голосов
/ 20 января 2012

Я не знаю точный контекст здесь (что такое "PKMvrMedsProductIssuesId"), но вы можете, например, использовать такой вспомогательный метод:

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

Чтобы использовать выражение для получения строки:

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

(«MyTypeProperty» - это ваш «PKMvrMedsProductIssuesId», любой «MyType» одного из ваших типов, где вы можете определить свое свойство)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...