2012-02-04 72 views
0

我有一個視圖模型在視圖模型中調用函數?

public class PersonsViewmodel 
    { 
    public string FirstName { get; set; }// from DB 
    public string LastName { get; set; }// from DB 
    public string FullName { get; set; } // this should be a custom value 
} 

LINQ查詢

var per = from p in db.Persons where p.Active==0   
        select new PersonsViewmodel 
        { FirstName =p.FirstName ,LastName =p.LastName , 
FullName =Reg(p.FirstName) 
}; 

public static string Reg(string str) 
       { 
        return str = Regex.Replace(str, "[^a-zA-Z0-9]+", "-", RegexOptions.Compiled); 
       } 

這將引發錯誤

LINQ到實體無法識別方法「System.String reg(System.String)'方法,並且此方法不能轉換爲 商店表達。

有沒有更好的方式來調用這個Reg函數在模型本身,而不是調用linq查詢,或者我應該在linq查詢後調用函數?

現在我在查看執行此操作時就像

@{ 
var FullName = Regex.Replace(model.FirstName, "[^a-zA-Z0-9]+", "-"); 
} 

和使用變量全名來呈現。

回答

1

這難道不是視圖模型工作?

public class PersonsViewmodel 
{ 
    public string FirstName { get; set; }// from DB 
    public string LastName { get; set; }// from DB 
    public string FullName 
    { 
     get 
     { 
      return Regex.Replace(FirstName, "[^a-zA-Z0-9]+", "-", RegexOptions.Compiled); 
     } 
    } 
} 
1

你必須事後做。當你編寫LINQ查詢時,你必須記住,如果它不能被翻譯成T-SQL,它可能不起作用。

+0

我們可以在視圖模型中做到這一點。 @jgauffin答案工作! – Gokul 2012-02-10 23:53:48

0

@Malcolm是對的,LINQ2SQL試圖將整個表達式轉換爲T-SQL,這並不總是可行的。

您可以嘗試之後做到這一點:

var pre = ...LINQ2SQL query...; 
var pre2 = pre.ToList().Select(p =>{ p.FirstName, p.LastName, FullName =Reg(p.FirstName)}); 
相關問題