Lambda表达式LINQ中的条件SELECT

时间:2013-07-12 08:09:05

标签: c# linq lambda

如果有人可以提供以下建议,我会很感激: 我需要根据不同的条件选择不同的值(在我的情况下是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>>)”的类型参数以供使用。尽量明确定义   类型参数。

提前多多感谢!

2 个答案:

答案 0 :(得分:4)

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

您的代码将更改为:

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

TSource应该是select方法中e的类型。 TResult应该是SqlFemaleScreeningSqlMaleScreeningSqlChildScreening的基本类型。

答案 1 :(得分:0)

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

human_screen.SelectMany(e => e.Some_Collection)