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 に答える