繁体   English   中英

System.Linq.IQueryable错误

[英]System.Linq.IQueryable Error

我正在使用ASP.NET MVC(旧版本)应用程序,我需要创建一个表单以根据两个参数查找预订:Date和RoomID。 数据库中有基础表:RoomID链接的ReservationRequests和Rooms。

我在存储库中编写了此查询:

public IQueryable<ReservationRequest> FindReservationRequestInfo(DateTime date, int roomID)
    {
        return from requests in FindAllReservationRequests()
                where requests.Date == date

                    & requests.RoomID == roomID

                select requests;
    }

该模型如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
namespace RoomReservations.Models
{
    public class FindReservationRequestInfo
{
    public IQueryable<string> ReservationRequestsInfo { get; set; }
    public DateTime Date { get; set; }

    public SelectList Rooms { get; set; }

    public FindReservationRequestInfo(IQueryable<string> reservationRequestsInfo, DateTime date, SelectList rooms)
    {
        ReservationRequestsInfo = reservationRequestsInfo;
        Date = date;
        Rooms = rooms;
    }
}

}

控制器中的代码是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using RoomReservations.Models;
using RoomReservations.Helpers;
using Telerik.Web.Mvc;


namespace RoomReservations.Controllers
{
    public class ReportsController : Controller
{
    IRepository Repository;

    public ReportsController()
        : this(new Repository())
    {
    }

    public ReportsController(IRepository repository)
    {
        Repository = repository;
    }


    //
    // GET: /Reports/FindReservationRequestInfo
    [Authorize(Roles = "Administrator")]
    public ActionResult FindReservationRequestInfo()
    {
        IEnumerable<Room> rooms = Repository.FindAllRooms();
        rooms = rooms.Concat(new List<Room>() { new Room() }.AsEnumerable()).OrderBy(o => o.ID);

        return View(new FindReservationRequestInfo(
            new List<string>().AsQueryable(), DateTime.Today,
            new SelectList(rooms, "ID", "Name")));
    }

    //
    // POST: /Reports/FindReservationRequestInfo
    [AcceptVerbs(HttpVerbs.Post), Authorize(Roles = "Administrator"), ValidateAntiForgeryToken]
    public ActionResult FindReservationRequestInfo(FormCollection collection)
    {
        IQueryable<string> reservationRequestsInfo;
        DateTime date = DateTime.Today;

        Room room = Repository.GetRoom(Convert.ToInt32(collection["ID"]));

        if (collection["Date.Date"] == String.Empty)
            ModelState.AddModelError("Date.Date", "Date is required");



        if (ModelState.Sum(s => s.Value.Errors.Count()) == 0)
        {
            date = DateTime.Parse(collection["Date.Date"]);

            if (room == null)
            {
                room = new Room();
                reservationRequestsInfo = Repository.FindReservationRequestInfo(date, room.ID);
            }

        }
        else
        {
            reservationRequestsInfo = new List<string>().AsQueryable();
        }

        IEnumerable<Room> rooms = Repository.FindAllRooms();
        rooms = rooms.Concat(new List<Room>() { new Room() }.AsEnumerable()).OrderBy(o => o.ID);

        return View(new FindReservationRequestInfo(
            reservationRequestsInfo, date,
            new SelectList(rooms, "ID", "Name", room.ID)));
    }
 }

} //

我不确定Controller中的代码出了什么问题。 如果有人可以帮助我了解我做错了什么,我将不胜感激。 提前非常感谢您!

您的查询正在返回

IQueryable<ReservationRequest>

但是在您的控制器中,您将其设置为等于声明为的变量

IQueryable<string>

所以这一点

    [AcceptVerbs(HttpVerbs.Post), Authorize(Roles = "Administrator"), ValidateAntiForgeryToken]
    public ActionResult FindReservationRequestInfo(FormCollection collection)
    {
        IQueryable<string> reservationRequestsInfo;
        //...

应该

    [AcceptVerbs(HttpVerbs.Post), Authorize(Roles = "Administrator"), ValidateAntiForgeryToken]
    public ActionResult FindReservationRequestInfo(FormCollection collection)
    {
        IQueryable<ReservationRequest> reservationRequestsInfo;
        //...

然后适当地重构以适应级联更改的影响。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM