如何创建子ID列表

时间:2013-07-02 11:51:41

标签: asp.net-mvc-3 linq tostring

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

1 个答案:

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

例如