2

我让自己完全困惑,如果有人能再次指出我正确的方向,我将不胜感激。

为了我自己的学习目的,我正在尝试将搜索表单添加到一个虚构的项目中。

想法是 - 我有一个日期文本框和租用天数文本框 - 当搜索被点击时 - 代码应该查找在输入日期和日期加上所需租用天数之间已预订的所有汽车. (一种)

这将生成必须从搜索的下一部分中排除的汽车列表 (B)

然后它搜索 Cars (C),并排除在 (B) 生成的列表

然后 Linq 填充 ct 对象 (D) freeCarTypes。

freeCarTypes 在这一点上,正确地保存了我正在寻找的数据 - 一个列表:

Car Type (TypeNme)
Type ID
TypeCount (how many of this car type are available)
NumSelected (set to 0 by default)

当我列出每种汽车类型时,NumSelected(我希望)将填充到模型中,并带有 TypeCount(可用)的下拉列表 - 然后它将填充模型的 NumSelected 部分。所以当帖子发布时,我有一个汽车类型列表,以及经销商感兴趣的每种类型的数量。

我的问题是,如何将汽车列表 - freeCarTypes (D) - 放入我的 SearchViewModel.TypesAvail?

是我使用 IQueryable 的 SearchViewModel 是错误的,还是我应该在这里使用其他东西 - 我正在绕圈子。

谢谢你的帮助,

标记

public class SearchViewModel
{
    [Required]
    public DateTime From { get; set; }
    [Required]
    public int Days { get; set; }
    public long DealerID { get; set; }
    public IQueryable<Car> Cars { get; set; }
    public IQueryable<TypesAvail> TypesAvails { get; set; }
}

    public class TypesAvail
{
        public String TypeNme { get; set; }
        public long TypeID { get; set; }
        public int TypeCount { get; set; }
        public int NumSelected { get; set; }
}

我的搜索控制器

   [HttpPost]
    public ActionResult Avail(SearchViewModel model, string id)
    {
        if (ModelState.IsValid)
        {

            // (A)
            var dteFrom = model.From;
            var dteTo = model.From.AddDays(model.Nights);

            // (B)
            var prebookedCars = db.Cars
                .Where(car => car.Rentals.Any(rental =>
                    (model.DealerID == rental.Dealer_id) && (
                    (dteFrom >= rental.dateout && dteFrom < rental.dateback)
                    ||
                    (dteTo > rental.dateout && dteTo <= rental.dateback)
                    ||
                    (dteFrom <= rental.dateout && dteTo >= rental.dateback)
                )));


                // (C)
            var freeCarTypes = db.Cars
                .Where(r => r.DealerID == model.DealerID)
                .Except(prebookedCars)
                .GroupBy(p => p.CarType)
                .Select(ct => new                       // (D)
                {
                    TypeNme = ct.Key.type_name,     
                    TypeID = ct.Key.type_id,
                    TypeCount = ct.Count(),
                    NumSelected = 0
                }
                );

            foreach (var fr in freeCarTypes)
            { 
                TypesAvail ta = new TypesAvail();
                {
                ta.NumSelected = fr.NumSelected;
                ta.TypeCount = fr.TypeCount;
                ta.TypeID = fr.TypeID;
                ta.TypeNme = fr.TypeNme;
                }

            }

            // This is where I'm stuck - how do I get the list above, into the ViewModel, to I can generate a list of car types, with a drop down list of how many are available

           // model.TypesAvail = ta;
           // model.TypesAvail = freeCarTypes;

            return View(model);
        }
        else    // model is not valid, so return the View
        {
            return View(model);
        }
    }
4

1 回答 1

4

这个怎么样?

// (C)    
model.TypesAvail = db.Cars.Where(r => r.DealerID == model.DealerID)
                      .Except(prebookedCars)
                      .GroupBy(p => p.CarType)
                      .Select(ct => new TypesAvail                 // (D)
                      {                      
                          TypeNme = ct.Key.type_name,
                          TypeID = ct.Key.type_id,
                          TypeCount = ct.Count(),
                          NumSelected = 0                  
                      };
于 2012-08-07T12:12:53.847 回答