2012-02-04 94 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)}); 
相关问题