我有一个视图模型
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进行渲染。
答案 0 :(得分:1)
之后你必须这样做。在编写LINQ查询时,您必须记住,如果它无法转换为T-SQL,它可能无法正常工作。
答案 1 :(得分: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);
}
}
}
答案 2 :(得分:0)
@Malcolm是对的,LINQ2SQL尝试将整个表达式转换为T-SQL,这并非总是可行。
之后你可以尝试这样做:
var pre = ...LINQ2SQL query...;
var pre2 = pre.ToList().Select(p =>{ p.FirstName, p.LastName, FullName =Reg(p.FirstName)});