如果有人可以提供以下建议,我会很感激: 我需要根据不同的条件选择不同的值(在我的情况下是Adapters),我试过这样:
return this.WrappedEntity.human_screen.SelectMany(e => e).Select(e =>
{
AHuman human = _unitOfWork.HumansRepo.GetById(e.human_uid.ToString());
if (e.vid_screen == "1" && human.Gender== Gender.Female)
{
return new SqlFemaleScreening(e);
}
else if (e.vid_screen == "1" && human.Gender== Gender.Male)
{
return new SqlMaleScreening(e);
}
else
{
return new SqlChildScreening(e);
}
});
但是我收到以下错误:
错误:应定义方法“
System.Linq.Enumerable.SelectMany <TSource,TResult> (System.Collections.Generic.IEnumerable <TSource>, System.Func <TSource, int, System.Collections.Generic.IEnumerable <TResult>>)
”的类型参数以供使用。尽量明确定义 类型参数。
提前多多感谢!
答案 0 :(得分:4)
问题在于,因为您正在返回多种不同类型的对象,所以编译器不确定您在返回的可枚举中期望的对象类型。通常,当您使用Select
或SelectMany
之类的东西时,编译器可以将其解决,因此您无需担心它。在这种情况下,你需要担心告诉它应该是什么。
您的代码将更改为:
return this.WrappedEntity.human_screen.SelectMany(e => e).Select<TSource, TResult>(e =>
{
//Same code as before in here
});
TSource
应该是select方法中e
的类型。 TResult
应该是SqlFemaleScreening
,SqlMaleScreening
,SqlChildScreening
的基本类型。
答案 1 :(得分:0)
SelectMany表达式的结果应为IEnumerable<T>
,例如
human_screen.SelectMany(e => e.Some_Collection)