调用视图模型中的函数
本文关键字:函数 模型 视图 调用 | 更新日期: 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)});