2012-01-20 14 views
0

我想替換類似x=>x.PKMvrMedsProductIssueId或任何不基於字符串的東西來替換「PKMvrMedsProductIssuesId」。爲什麼?因爲如果數據庫人員選擇重命名該字段,我的程序將崩潰。如何在lambda中替換擴展方法中的字符串值

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; 
} 
+1

這裏沒有拉姆達。 –

+0

你應該在連接數據庫的實體中處理這個問題。 – cpoDesign

+0

這是什麼意思?任何文章提示如何處理在我的實體中的關鍵字? – hidden

回答

1

您正在使用SelectList。爲了調用該構造函數,你必須有一個字符串。我們可以提出的任何改變仍然會導致一個字符串(從某處)被傳入該構造函數。

好消息是:該字符串可以來自任何地方。它可以來自配置,從數據庫...你喜歡哪裏。

+0

好吧來自實體定義edmx.file – hidden

0

我不知道這裏的確切上下文(究竟是什麼「PKMvrMedsProductIssuesId」是),但你可以例如使用這樣的輔助方法:

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

要使用表達式來獲得字符串:

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

(「MyTypeProperty」是你的「PKMvrMedsProductIssuesId」任意「MyType的」定義你的類型,你可以有你的財產之一)

+0

PkMvrMedsProductIssuesId是數據庫中的一個字段。按順序處理數據庫中表的列名稱。 – hidden