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。我错过了这个,现在更新了我的问题。