在我的控制器中,我有一个接收十进制值(id)的方法。 此方法的目标是从包含工作许可的数据库表中恢复旧修订的列表。此表中的每条记录都有一个WorkPermitID作为主键,OldRevisionWorkPermitID引用了以前版本的ID。
收集子ID(旧版本)时没有问题,但它引发了一个异常,表明LINQ to Entities无法识别.ToString()
方法。
我做错了什么?我知道我需要不转换为字符串(WorkPermitID在数据库中被定义为数字),但我尝试了几种方法但没有成功。
public ActionResult GetVersions(decimal id){
var model = new PermisosTrabajoModel();
List<string> ChildIDs = new List<string>();
var WP = OtWeb.WorkPermit.Single(q => q.WorkPermitID == id);
while (WP.OldRevisionWorkPermitID != null)
{
var child = WP.OldRevisionWorkPermitID;
ChildIDs.Add(child.ToString());
WP = OtWeb.WorkPermit.Single(q => q.WorkPermitID == child);
}
model.WPs = OtWeb.WorkPermit
.Where(q => q.DeptID == 1
&& ChildIDs.Contains(q.WorkPermitID.ToString())).ToList();
return View (model);
}
答案 0 :(得分:1)
<强>解决方法1 强>
如果您的两个字段均为decimal
...请勿使用ToString()
,并使用decimal
var model = new PermisosTrabajoModel();
var childIDs = new List<decimal>();
var WP = OtWeb.WorkPermit.Single(q => q.WorkPermitID == id);
while (WP.OldRevisionWorkPermitID != null)
{
childIDs.Add(WP.OldRevisionWorkPermitID);
WP = OtWeb.WorkPermit.Single(q => q.WorkPermitID == child);
}
model.WPs = OtWeb.WorkPermit
.Where(q => q.DeptID == 1
&& childIDs.Contains(q.WorkPermitID)).ToList();
<强>溶液2 强>
在linq2entities中,您可以使用SqlFunctions.StringConvert代替ToString()作为数值。
SqlFunctions.StringConvert(q.WorkPermitId)
而不是
q.WorkPermitID.ToString()
例如