0

ここでは完全な劣等生のように感じます。曜日ごとに子オブジェクトのコレクションを保持する親オブジェクトがあります。だから私は何かのようなことをすることができparent.MondayChildrenますparent.TuesdayChildren

親オブジェクトのコレクションがあり、linq クエリで使用したいのですparents.SelectMany(c => c.MondayChildren)が、現在の曜日に基づいています。

SelectManyメソッドに変数を提供するにはどうすればよいですか?

更新情報:

重要な情報を見逃していることがわかりました。このクエリは SQL に変換されます。説明すると、ユニットは複数のスロットプールで構成され、患者スケジュールは曜日ごとにスロットプールに割り当てられます。

内部 .NET Framework Data Provider エラー 1025 を引き起こす私のコードは以下のとおりです。

Func<SlotPool, IEnumerable<PatientSchedule>> queryDay = null;

            switch (DateTime.Today.DayOfWeek)
            {
                case DayOfWeek.Monday:
                    queryDay = d => d.MondayPatientSchedules;
                    break;
                case DayOfWeek.Tuesday:
                    queryDay = d => d.TuesdayPatientSchedules;
                    break;
                // .. Not shown for brevity
                default:
                    throw new NotSupportedException("Unsupported DayOfWeek");
            }    

IEnumerable<UnitWithCountVM> data = _unitOfWork.Units.GetAll()
                .Select(u => new UnitWithCountVM()
                {
                    ID = u.ID,
                    Name = u.Name,
                    PatientNumber = u.SlotPools.SelectMany(queryDay).Count()
                }).ToList();    
4

2 に答える 2

0

おそらくswitch:

List<Children> todaysChildren = parents
    .SelectMany(p =>
    {
        switch(DateTime.Today.DayOfWeek)
        {
            case DayOfWeek.Monday:
                return p.MondayChildren; 
            case DayOfWeek.Tuesday:
                return p.TuesdayChildren; 
            // ...
            default: 
                throw new NotSupportedException("Unsupported DayOfWeek");
        }
    })
    .ToList();
于 2013-11-14T13:10:42.483 に答える
0

これが私の最終的な解決策です。重要なのは、Expression を提供するだけでなく、.AsQueryable() を SlotPools コレクションに追加することでした。誰かが私が見逃したかもしれない問題を見つけたら、私に知らせてください。私はEntityFrameworkとLinqに非常に慣れていません:

Expression<Func<SlotPool, IEnumerable<PatientSchedule>>> queryDay = null;


        switch (DateTime.Today.DayOfWeek)
        {
            case DayOfWeek.Monday:
                queryDay = d => d.MondayPatientSchedules;
                break;
            case DayOfWeek.Thursday:
                queryDay = d => d.MondayPatientSchedules;
                break;
            // .. Not shown for brevity
            default:
                throw new NotSupportedException("Unsupported DayOfWeek");
        }

        IEnumerable<UnitWithCountVM> data = _unitOfWork.Units.GetAll()
            .OrderBy(u => u.Name)
            .Select(u => new UnitWithCountVM()
            {
                ID = u.ID,
                Name = u.Name,
                PatientNumber = u.SlotPools.AsQueryable().SelectMany(queryDay).Count()
            }).ToList();
于 2013-11-15T08:57:53.670 に答える