我想将"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;
}
您使用的是SelectList
。为了调用该构造函数,您必须有一个字符串。我们可以提出的任何更改仍然会导致一个字符串(来自某个地方)被传递到该构造函数中。
好消息是:这根绳子可以来自任何地方。它可以来自配置,也可以来自数据库。。。任何你喜欢的地方。
我不知道这里的确切上下文("PKMvrMedsProductIssuesId"到底是什么),但您可以使用这样的辅助方法:
public static string GetPropertyAsString<T>(Expression<Func<T, object>> expression)
{
return GetPropertyInfo(expression).Name;
}
使用表达式获取字符串:
GetPropertyAsString<MyType>(x => x.MyTypeProperty);
("MyTypeProperty"是您的"PKMvrMedsProductIssuesId",任何"MyType"都是您可以定义属性的类型之一)