2

如果有人可以就以下内容提出建议,我将不胜感激:我需要根据不同的条件选择不同的值(在我的情况下为适配器),我尝试这样:

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>>)错误:应该定义方法“”的类型参数以供使用。尝试清楚地定义类型参数。

提前非常感谢!

4

2 回答 2

4

问题在于,因为您要返回多种不同类型的对象,所以编译器不确定您在返回的枚举中所期望的对象类型。通常当你使用类似的东西Select或者SelectMany编译器可以解决它时,你不需要担心它。在这种情况下,您需要担心告诉它它们应该是什么。

您的代码将更改为如下所示:

return this.WrappedEntity.human_screen.SelectMany(e => e).Select<TSource, TResult>(e =>
     {
         //Same code as before in here
     });

TSource应该是e您选择方法中的类型。TResult应该是SqlFemaleScreening, SqlMaleScreening,SqlChildScreening的基本类型

于 2013-07-12T08:21:15.547 回答
0

SelectMany 表达式的结果应该是IEnumerable<T>,例如

human_screen.SelectMany(e => e.Some_Collection)
于 2013-07-12T08:38:59.617 回答