调用视图模型中的函数

本文关键字:函数 模型 视图 调用 | 更新日期: 2023-09-27 18:22:21

我有一个视图模型

 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 to Entities无法识别方法"System.String"reg(System.String)'方法,而此方法无法转换为存储表达式。

有没有更好的方法在模型本身中调用Reg函数,而不是在linq查询中调用,或者我应该在linq询问之后调用该函数?

现在我正在像一样在视图中执行此操作

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

并使用变量FullName进行渲染。

调用视图模型中的函数

这不是视图模型的工作吗?

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); 
        }
    }
}

您必须在之后进行。当您编写LINQ查询时,您必须记住,如果不能将其转换为t-SQL,则可能无法工作。

@Malcolm是对的,LINQ2SQL试图将整个表达式转换为T-SQL,这并不总是可能的。

你可以试着事后再做:

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