无法在mvc4中访问linq to sql结果

时间:2013-06-14 11:39:39

标签: sql-server asp.net-mvc linq razor

我从theee表获取结果使用linq到sql但是我无法使用视图中的值,我怎么能这样做,因为我是mvc的新手

这是我的控制器代码:

public ActionResult Grid()
{
    ViewBag.Message = "Your Grid page.";

    bc_limsEntities objbc_limsDBContext = new bc_limsEntities();


    var result = from b in objbc_limsDBContext.dc_tpatient_bookingm
                  join d in objbc_limsDBContext.dc_tpatient_bookingd on b.bookingid equals d.bookingid
                  join t in objbc_limsDBContext.dc_tp_test on d.testid equals t.TestId

                  where b.bookingid == 41239 && d.ProcessID == 0006 && t.SubdepartmentId == 16

                  select new {b.bookingid,
                              d.bookingdid,
                              d.testid,
                              t.Test_Name,
                              t.procedureid,
                              t.ClinicalUse,
                              t.AutomatedText};

    ViewBag.Result = result.ToList();


    return View(result);
}

我在视野中这样做:

@foreach(var item in ViewBag.Result)
{
    <h1>@item</h1>
}

3 个答案:

答案 0 :(得分:4)

我通过这种方式解决了自己:

public class ResultSet
{
    public long bookingid { get; set; }
    public long bookingdid { get; set; }
    public long testid { get; set; }
    public string Test_Name { get; set; }
    public long procedureid { get; set; }
    public string ClinicalUse { get; set; }
    public string AutomatedText { get; set; }

}

并在Controller中:

bc_limsEntities objbc_limsDBContext = new bc_limsEntities();


        var result = from b in objbc_limsDBContext.dc_tpatient_bookingm
                      join d in objbc_limsDBContext.dc_tpatient_bookingd on b.bookingid equals d.bookingid
                      join t in objbc_limsDBContext.dc_tp_test on d.testid equals t.TestId

                      where b.bookingid == 41239 && d.ProcessID == 0006 && t.SubdepartmentId == 16

                      select new {b.bookingid,
                                  d.bookingdid,
                                  d.testid,
                                  t.Test_Name,
                                  t.procedureid,
                                  t.ClinicalUse,
                                  t.AutomatedText};

        List<ResultSet> resultList = new List<ResultSet>();

        foreach (var temp in result)
        {
            ResultSet objResultSet = new ResultSet();

            objResultSet.bookingid = temp.bookingid;
            objResultSet.bookingdid = temp.bookingdid;
            objResultSet.testid = temp.testid;
            objResultSet.Test_Name = temp.Test_Name;
            objResultSet.procedureid = long.Parse(temp.procedureid.ToString());
            objResultSet.ClinicalUse = temp.ClinicalUse;
            objResultSet.AutomatedText = temp.AutomatedText;

            resultList.Add(objResultSet);
        }

        ViewBag.Result = resultList;
return View(resultList);

并在视图中这样:

@foreach(var item in Model)
          {
              <tr>
              <td class="t_center"><input type="checkbox" id="c14" name="cc" /><label for="c14"><span></span></label></td>
              <td>@item.bookingid</td>
              <td>@item.bookingdid</td>
              <td>@item.testid</td>
              <td>@item.Test_Name</td>
              <td>@item.procedureid</td>
              <td>@item.ClinicalUse</td>
              <td>@item.AutomatedText</td>

              </tr>                  
          }

答案 1 :(得分:3)

请勿使用View包,请使用View Model。在这种情况下,您已经将results作为视图模型传递,因此您需要在视图页面的顶部声明模型,如下所示:

@model List<Item>

(或任何类型的对象results

然后你可以像这样使用它:

@foreach(var item in Mode)
{
    <h1>@item.Property</h1>
}

通常情况下,您将拥有一个专用的View Model类,其中包含许多属性,其中一个属于您的results列表,如果您喜欢冒险,请尝试使用它!

编辑:因为您正在动态创建自定义对象而不知道类型,所以您应该创建一个包含所需字段的类(例如Item),然后从三个表中填充该类,然后使用它。

答案 2 :(得分:-1)

尝试类似的事情:

@foreach(var item in ViewBag.Result)
{
    <h1>@item.bookingid</h1>
}

当然,如果你想坚持使用viewbag,但是否则musefan建议使用视图模型更清洁,你应该做什么。