0

在我的控制器中,我有一个接收十进制值(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);
}
4

1 回答 1

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()

例如

于 2013-07-02T12:15:34.257 回答