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,循环我的结果,并构建一个我需要的强类型列表。谢谢你的建议。是的,这是我的建议。如果你这样做,生活就会变得非常简单——在这种情况下,比匿名类型容易得多。