【问题标题】:mvc5 linq error displaying selected information显示所选信息的 mvc5 linq 错误
【发布时间】:2015-04-14 16:43:35
【问题描述】:

我创建了一个空白的 MVC5 控制器,我被告知要这样做,在创建带有多路连接子句的 select 语句后,我尝试将选定的信息传递到视图中,但在加载视图时它会因以下错误而崩溃: “传递到字典中的模型项的类型为'System.Collections.Generic.List1[<>f__AnonymousType65[System.DateTime,System.TimeSpan,System.String,System.Int32,System.String]]',但是这个字典需要“System.Collections.Generic.IEnumerable`1[snBusService04.Models.trip]”类型的模型项。"

这是我的索引视图代码

 public ActionResult Index(string busRouteCode)
        {
            var tripInfo = "";

            if (busRouteCode != null)
            {
                HttpCookie busRouteCodeCookie = new HttpCookie("busRouteCodeCookie");
                busRouteCodeCookie.Value = busRouteCode;
                busRouteCodeCookie.Expires = DateTime.Now.AddHours(1);
                Response.Cookies.Add(busRouteCodeCookie);
            }
            else if (Request.Cookies["busRouteCodeCookie"] != null )
            {
                tripInfo = Request.Cookies["busRouteCodeCookie"].Value;
            }
            else
            {
                TempData["message"] = "Please select a bus route";
               return RedirectToAction("Index", "snBusRoutes");
            }

            var tripQuery = from br in db.busRoutes
                            join rs in db.routeSchedules on br.busRouteCode equals rs.busRouteCode
                            join t in db.trips on rs.routeScheduleId equals t.routeScheduleId
                            join d in db.drivers on t.driverId equals d.driverId
                            join b in db.buses on t.busId equals b.busId
                           // where br.busRouteCode == busRouteCode
                            select new
                            {
                                t.tripDate,
                                rs.startTime,
                                d.fullName,
                                b.busNumber,
                                t.comments
                            };
            var queryResult = tripQuery.AsEnumerable()
                                .Select(t => new
                                {
                                    t.tripDate,
                                    t.startTime,
                                    t.fullName,
                                    t.busNumber,
                                    t.comments
                                });

             return View(queryResult.ToList());            
        }

查看代码如下:

@model IEnumerable<snBusService04.Models.trip>

    @{
        ViewBag.Title = "Monitored Trip Information for " + Request.Cookies["busRouteCodeCookie"].Value;
    }

    <h2>@ViewBag.Title</h2>
    <h3>@TempData["message"]</h3>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.tripDate)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.startTime)
        </th>    
        <th>
            @Html.DisplayNameFor(model => model.fullName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.busNumber)
        </th>       
        <th>
            @Html.DisplayNameFor(model => model.comments)
        </th>   
    </tr>

    @foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.tripDate)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.startTime)
            </td>  
            <td>
                @Html.DisplayFor(modelItem => item.fullName)
            </td>           
            <td>
                @Html.DisplayFor(modelItem => item.busNumber)
            </td>            
            <td>
                @Html.DisplayFor(modelItem => item.comments)
            </td>       
        </tr>
    }
</table>

【问题讨论】:

    标签: c# asp.net asp.net-mvc linq asp.net-mvc-5


    【解决方案1】:

    您的视图期待IEnumerable&lt;snBusService04.Models.trip&gt;

    将您的查询结果更改为以下返回预期类型而不是匿名 IEnumerable。 (假设您的字段与您的命名结构匹配):

    var queryResult = tripQuery.AsEnumerable()
                 .Select(t => new snBusService04.Models.trip
                 {
                     tripDate = t.tripDate,
                     startTime = t.startTime,
                     fullName = t.fullName,
                     busNumber = t.busNumber,
                     comments = t.comments
                  });
    

    【讨论】:

    • 所以我发现我不需要查询结果,但现在我的问题是我需要的字段位于不同的表中。我的控制器用于的行程表只有 ID 值,但我需要记录的实际名称/编号。其实我觉得我可能是个白痴,只需要使用 model.driver.fullName 等。
    • @SteveN 您应该能够使用 linq 查询连接其他表。创建一个新问题,人们回答 Linq 问题的速度如此之快,我怀疑它会是我的答案。 :) msdn.microsoft.com/en-us/library/bb311040.aspx
    猜你喜欢
    • 1970-01-01
    • 2016-07-25
    • 2013-08-20
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    相关资源
    最近更新 更多