Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我想显示在用户输入的特定时间范围内可用的所有汽车_C#_Asp.net_Asp.net Mvc_Model View Controller - Fatal编程技术网

C# 我想显示在用户输入的特定时间范围内可用的所有汽车

C# 我想显示在用户输入的特定时间范围内可用的所有汽车,c#,asp.net,asp.net-mvc,model-view-controller,C#,Asp.net,Asp.net Mvc,Model View Controller,我制作了一个查询视图模型 public class QueryVM { public List<CarVM> CarVMs { get; set; } 这是我的控制器 public ActionResult Searched(DateTime? Start, DateTime? End) { if (Start.HasValue) { ViewBag.Start = Start.Value.Date;

我制作了一个查询视图模型

 public class QueryVM
{

    public List<CarVM> CarVMs { get; set; }
这是我的控制器

 public ActionResult Searched(DateTime? Start, DateTime? End)
    {
        if (Start.HasValue)
        {
            ViewBag.Start = Start.Value.Date;
        }
        if (End.HasValue)
        {
            ViewBag.End = End.Value.Date;
        }

        QueryVM queryVM = new QueryVM();
        var carList = db.Cars;
        var bookingList = db.Bookings;

        queryVM.CarVMs = new List<CarVM>();
        foreach (var item in carList)
        {
            CarVM cvm = new CarVM();
            cvm.CarID = item.CarID;
            cvm.Make = item.Make;
            cvm.Model = item.Model;
            cvm.Colour = item.Colour;

            queryVM.CarVMs.Add(cvm);
        }

        foreach (var item in bookingList)
        {
            CarVM bvm = new CarVM();
            bvm.StartDate = item.StartDate;
            bvm.EndDate = item.EndDate;
            queryVM.CarVMs.Add(bvm);
        }
        return View(queryVM);

在这里,我想检查查看包中日期之间可用的车辆,
r.EndDate
r.StartDate
是表中的当前预订日期。我想我遇到的问题是,我从
db.booking
获取预订日期,从
db.Cars
获取车辆信息,但当我运行它时,我得到
null
0
,但我得到了预订日期,这似乎有点混乱。一个CarVM应该代表一辆车,在这种情况下,我们可以假设它也有一个日期范围列表,当该车已经预订(不可用)时,但您正在做的是有一个CarVM,它是汽车详细信息,然后是一组其他CarVM,它们纯粹指定汽车预订的日期。让你的生活更简单,有一个类,有一个开始日期和结束日期的日期对-让我们称之为DateRange,有一个CarVM

List<DateRange> BookedDates = new List<DateRange>();

“没有任何已预订日期的车辆与用户想要的车辆日期重叠”

公共预订重叠(DateTime qStart,DateTime qEnd){//查询的日期范围仅在该日期范围之后开始时是安全的,如果(qStartStartDate){qEnd=qEnd.Date;}否则{}//范围结束或在此范围开始之前结束//其他任何内容都是重叠返回!(qStart>EndDate&&qEnd
作为回报,它说不能将bool类型转换为sandstrom.models.Booking以及我应该如何在控制器中访问它对不起,我试图理解我是MVC新手。对不起,我的手机自动更正bool to book in
public book Overlaps
-你似乎已经猜到它应该是预订的,但它应该是boolI已经给出了在视图中使用它的代码(一个示例),我的大部分回答都是为了解决控制器在将预订从db中取出并生成新的carVM(当我说它应该是现有carVM上的新日期范围时)时所犯的错误,所以应该很明显在控制器中替换什么?(提示:第二个循环)
 @{
    if (Model != null && ViewBag.Start != null && ViewBag.End != null)
    {
        foreach (var item in Model.CarVMs.Where(r => ViewBag.Start < r.EndDate && ViewBag.End > r.StartDate))
        {
            <td>
                @Html.DisplayFor(modelItem => item.CarID)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Make)
            </td>
List<DateRange> BookedDates = new List<DateRange>();
class DateRange{
  public DateTime StartDate{get;set;}
  public DateTime EndDate{get;set;}

  public bool Overlaps(DateTime qStart, DateTime qEnd){
    //a queried date range is only safe if it starts after this
    //range ends or it ends before this range starts.
    //anything else is an overlap
    return !(qStart > EndDate || qEnd < StartDate);
  }
}
carVMs.Where(c => !c.BookedDates.Any(dr => dr.Overlaps(userChosenStartDate, userChosenEndDate)));