C# 如何从匿名类型IEnumerable中选择项的子集?

C# 如何从匿名类型IEnumerable中选择项的子集?,c#,linq-to-sql,ienumerable,yield,ienumerator,C#,Linq To Sql,Ienumerable,Yield,Ienumerator,我有以下代码 MyDataContext db = MyDataContext.Create(); bc = db.BenefitCodes.Select( b => new { BenCd = b.BenCd

我有以下代码

MyDataContext db = MyDataContext.Create();
            bc =
                db.BenefitCodes.Select(
                    b =>
                    new
                        {
                            BenCd = b.BenCd
                            , Description = b.BenDesc
                            , BenInterest = b.BenInterest
                            , CodeDescription = string.Format("{0} - {1}", b.BenCd, b.BenDesc)
                        });
我不得不选择匿名类型,因为CodeDescription不是benefitCode的属性,客户希望它以这种方式出现在下拉列表中。无论如何,我的问题是如何从这个列表中选择项目的子集?我需要根据BenInterest属性选择项目

这返回的是IEnumerable,所以我试着走这条路,这就是我被卡住的地方。我的目的是构建一个新的IEnumerable列表,并为其设置一个下拉数据源

 IEnumerator enumerator = BenefitCodes.GetEnumerator(); 
        while(enumerator.MoveNext())
        {
              //What can I do here to return items based on BenInterest? 
              //I basically either want items that have a BenInterest of 'E'
              // or items that DO NOT have a BenInterest of 'E'
              // this is based on the value of a radioButtonList on the page
        }
那么,我如何创建一个相同匿名类型的新枚举,它只包含所需的项呢

谢谢你的帮助。 干杯 ~ck

您只需使用:

var newCollection = bc.Where( e => e.BenInterest == 'E' );
您只需使用:

var newCollection = bc.Where( e => e.BenInterest == 'E' );

您不能在调用select之前添加对.Where()函数的调用吗?您不能在调用select之前添加对.Where()函数的调用吗?不。这将返回IEnumerable而不是IEnumerable。不支持的地方。”CodeDescription'不是表中的一个字段,因此我得不到类型safety.mmm-bc应该是IEnumerable,T是匿名类型。福利代码的“类型”是什么?这是在使用LINQtoSQL、实体框架等吗?在任何情况下,您都可以创建一个类来保存此信息,并构造它,而不是使用匿名类型。然后可以使用IEnumerable.Cast将其转换为IEnumerableYes LINQ to SQL。我没有想到要为此创建一个类。听起来是个好主意。我将使用相同的qry,循环我的结果,并构建一个我需要的强类型列表。谢谢你的建议。是的,这是我的建议。如果你这样做,生活就会变得非常简单——在这种情况下比匿名类型容易得多。不。这将返回IEnumerable而不是IEnumerable。不支持的地方。”CodeDescription'不是表中的一个字段,因此我得不到类型safety.mmm-bc应该是IEnumerable,T是匿名类型。福利代码的“类型”是什么?这是在使用LINQtoSQL、实体框架等吗?在任何情况下,您都可以创建一个类来保存此信息,并构造它,而不是使用匿名类型。然后可以使用IEnumerable.Cast将其转换为IEnumerableYes LINQ to SQL。我没有想到要为此创建一个类。听起来是个好主意。我将使用相同的qry,循环我的结果,并构建一个我需要的强类型列表。谢谢你的建议。是的,这是我的建议。如果你这样做,生活就会变得非常简单——在这种情况下,比匿名类型容易得多。