首页 > 解决方案 > foreach 语句无法运行,因为不包含带有元组 ASP.NET MVC 的“GetEnumerator”的公共定义

问题描述

我想使用 LINQ 构建我的视图并加入 2 个表,但是我在模型中的 foreach 视图中遇到了这个错误

@foreach (var item in Model)

这是我的课:

public partial class Lab_orders_Cash
    {
        [Display(Name = "Order Id")]
        public int cash_order_id { get; set; }

        [Display(Name = "Order Date")]
        public Nullable<System.DateTime> order_date { get; set; }

        [Display(Name = "MRN File No.")]
        public Nullable<int> patient_no { get; set; }
        public string invoice_order_no { get; set; }
        public string order_description { get; set; }
        public string user_id { get; set; }

        [Display(Name = "Order Status")]
        public Nullable<int> order_status { get; set; }
        public Nullable<int> catid { get; set; }
        public Nullable<int> almansoor { get; set; }
        public Nullable<int> prio_id { get; set; }
    }
 public partial class Lab_Sample_status
    {
        public int status_id { get; set; }
        public string status_name { get; set; }
    } 

这是我的控制器:

public ActionResult ordersCash()
        {
         var OrdersList = from o in db.Lab_orders_Cash
           Join os in db.Lab_Sample_status on o.order_status equals os.status_id into tablestatus
                          where o.patient_no == (int)Session["UserpatientNo"]
                          select o;
            return View(OrdersList);



        }

在视图中我使用了元组:

@using AljawdahNewSite.Models;
@model Tuple<Lab_orders_Cash,Lab_Sample_status>
@{

@{
    ViewBag.Title = "ordersCash";
    Layout = "~/Views/Shared/_LayoutPatients.cshtml";
}

<h2>Orders List </h2>


<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(Tuple => Tuple.Item1.cash_order_id)
        </th>
        <th>
            @Html.DisplayNameFor(Tuple => Tuple.Item1.order_date)
        </th>
        <th>
            @Html.DisplayNameFor(Tuple => Tuple.Item1.patient_no)
        </th>

        <th>
            @Html.DisplayNameFor(Tuple => Tuple.Item2.status_name)
        </th>

        <th></th>
    </tr>




@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(Tuple => Tuple.Item1.cash_order_id)
        </td>
        <td>
            @Html.DisplayFor(Tuple => Tuple.Item1.order_date)
        </td>
        <td>
            @Html.DisplayFor(Tuple => Tuple.Item1.patient_no)
        </td>

        <td>
            @Html.DisplayFor(Tuple => Tuple.Item2.status_name)
        </td>

        <td>
           @Html.ActionLink("Details", "Details", new { id=item.cash_order_id }) 

        </td>
    </tr>
}

</table>

在 foreach 中选择模型时出现此错误,我也尝试像这样在视图中使用 IEnumerable

@model Tuple<IEnumerable<Lab_orders_Cash>,IEnumerable<Lab_Sample_status>>

但是当我选择模型时出现同样的错误,它显示错误我需要更改什么来解决这个错误。

标签: c#asp.net-mvc

解决方案


您可以使用另一种方式,例如以下步骤:

1-创建新类并将您的表放在该类中

public class Tables
    {

        public Lab_orders_Cash LabOrdersCash { get; set; }
        public Lab_Sample_status LabOrderStatus { get; set; }

    }

2-编写控制器,如下所示:

public ActionResult ordersCash()
        {
            List<Lab_orders_Cash> ordercash = db.Lab_orders_Cash.ToList();
            List<Lab_Sample_status> samplestatus = db.Lab_Sample_status.ToList();

            var OrdersList = from o in ordercash
                 join st in samplestatus on o.order_status equals st.status_id
                 where o.patient_no == (int)Session["UserpatientNo"]
              select new Tables{ LabOrdersCash = o , LabOrderStatus = st };

            return View(OrdersList);

        }

3-使用以下代码创建您的视图:

@model IEnumerable<AljawdahNewSite.Models.Tables>
@{
    ViewBag.Title = "ordersCash";
    Layout = "~/Views/Shared/_LayoutPatients.cshtml";
}

<h2>Orders List</h2>

<table class="table">
        <tr>
            <td> Order No. </td>
            <td> order date    </td>
            <td> Patient No  </td>
            <td> Status   </td>


        </tr>
        @foreach (var item in Model)
        {
            <tr>
                <td>@item.LabOrdersCash.cash_order_id</td>
                <td>@item.LabOrdersCash.order_date</td>
                <td>@item.LabOrdersCash.patient_no</td>
                <td>@item.LabOrderStatus.status_name</td>
            </tr>
        }
    </table>

通过这种方式,您可以更有效、更轻松地将所有表添加到该表类中,并在项目中的任何位置调用该类,并且比元组更容易。


推荐阅读