C# 如何将变量传递给。选择Many

C# 如何将变量传递给。选择Many,c#,entity-framework,linq,C#,Entity Framework,Linq,在这里感觉像个傻瓜。我有一个父对象,它保存一周中每天的子对象集合。所以我可以做一些像parent.MondayChildren或parent.TuesdayChildren等的事情 我有一个父对象集合,在我的linq查询中,我想使用父对象。选择many(c=>c.MondayChildren),但基于一周中的当前日期 如何为SelectMany方法提供变量 更新信息: 我现在明白了,我错过了重要的信息。此查询将转换为SQL。为了说明这一点,单元由多个slotpool组成,而PatientsSch

在这里感觉像个傻瓜。我有一个父对象,它保存一周中每天的子对象集合。所以我可以做一些像
parent.MondayChildren
parent.TuesdayChildren
等的事情

我有一个父对象集合,在我的linq查询中,我想使用
父对象。选择many(c=>c.MondayChildren)
,但基于一周中的当前日期

如何为
SelectMany
方法提供变量

更新信息:

我现在明白了,我错过了重要的信息。此查询将转换为SQL。为了说明这一点,单元由多个slotpool组成,而PatientsSchedule在一周中的每一天都分配给一个slotpool

下面是我的代码,它导致内部.NET Framework数据提供程序错误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();    
Func queryDay=null;
切换(DateTime.Today.DayOfWeek)
{
案件星期一星期一:
queryDay=d=>d.MondayPatientSchedules;
打破
案件星期二:
queryDay=d=>d.tuesdaydpatientschedules;
打破
//…为简洁起见,未显示
违约:
抛出新的NotSupportedException(“Unsupported DayOfWeek”);
}    
IEnumerable data=\u unitOfWork.Units.GetAll()
.Select(u=>newunitwithcountvm()
{
ID=u.ID,
名称=美国名称,
PatientNumber=u.SlotPools.SelectMany(queryDay.Count)()
}).ToList();

可能带有
开关

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();
List todaysChildren=家长
.SelectMany(p=>
{
切换(DateTime.Today.DayOfWeek)
{
案件星期一星期一:
返回p.MondayChildren;
案件星期二:
返回星期二儿童;
// ...
违约:
抛出新的NotSupportedException(“Unsupported DayOfWeek”);
}
})
.ToList();

这是我的最终解决方案。关键是要提供一个表达式,还要将.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();
表达式queryDay=null;
切换(DateTime.Today.DayOfWeek)
{
案件星期一星期一:
queryDay=d=>d.MondayPatientSchedules;
打破
星期四,星期四:
queryDay=d=>d.MondayPatientSchedules;
打破
//…为简洁起见,未显示
违约:
抛出新的NotSupportedException(“Unsupported DayOfWeek”);
}
IEnumerable data=\u unitOfWork.Units.GetAll()
.OrderBy(u=>u.Name)
.Select(u=>newunitwithcountvm()
{
ID=u.ID,
名称=美国名称,
PatientNumber=u.SlotPools.AsQueryable().SelectMany(queryDay).Count()
}).ToList();

不需要特殊语法。请显示您有问题的实际代码,并描述与您期望的不同的工作方式。您能添加一个您期望的代码示例吗?您不能将变量传递给
SelectMany
,但是您可以在传递给
SelectMany
Func
的闭包中包含局部变量。如果您使用的是EntityFramework,您需要使用
表达式
,而且您的一些
IEnumerable
应该是
IQueryable
sThanks@ScottChamberlain您的评论给了我足够的动力找到正确的答案。答案张贴在问题中。@Copers将答案作为答案张贴。等待两天后,您可以接受自己的答案。感谢您的输入,但我无法使用此解决方案,因为查询需要转换为SQL。我错过了这个,现在更新了我的问题。