【发布时间】:2018-03-31 08:23:02
【问题描述】:
我有一个控制器,使用以下方法 getMail():
public JsonResult getMail(string id)
{
int Id = Convert.ToInt32(id);
string pattern = @"\bmem_id\b";
string replace = "100";
var result = (from a in db.tblmail_type
where a.Id == Id
select new MailModel
{
subject = a.Subject,
Content = Regex.Replace(a.Content, pattern, replace);
});
return Json(result, JsonRequestBehavior.AllowGet);
}
此方法用于获取邮件内容。在获取内容之前,我想将邮件内容中的“mem_id”替换为“100”。默认内容如下:
Content = "您已成功注册会员ID:mem_id"
我在 LINQ 中使用了Regex.Replace() 方法。但是这段代码不会改变内容。当我将此代码更改为下面给出的这种形式时,它可以正常工作。
public JsonResult getMail(string id)
{
int Id = Convert.ToInt32(id);
var input = db.tblmail_type.Where(x=>x.Id==Id).FirstOrDefault().Content;
string pattern = @"\bmem_id\b";
string replace = "100";
string content = Regex.Replace(input, pattern, replace);
var result = (from a in db.tblmail_type
where a.Id == Id
select new MailModel
{
subject = a.Subject,
Content = content
});
return Json(result, JsonRequestBehavior.AllowGet);
}
为什么会这样?任何人都可以指定这个奇怪问题背后的原因吗?如何替换 LINQ 中的“内容”?
【问题讨论】:
-
第一种方法是替换每封邮件。第二种方法是替换所有邮件。正则表达式不在循环中。
-
db.tblmail_type的类型是什么?我怀疑问题可能是在第一种情况下您的Regex.Replace正在数据库中执行,这可能有不同的正则表达式规则。 -
@Jon Skeet,我在数据库中名为 tblmail_type 的表中存储了不同类型的邮件。如何替换 linq 查询中的内容。你有什么解决办法吗?
-
这仍然不是
db.tblmail_type的编译时类型。如果将鼠标悬停在 VS 上会显示什么?我们根本不知道您是如何访问数据库的。 -
感谢@jon skeet 为我花费了宝贵的时间。
标签: c# regex asp.net-mvc linq