使用多Where从句筛选CarBrands枚举指定值返回空结果,求解决方案
问题原因分析
你写的代码里连续调用了两次Where,第一次筛选出等于CarBrands.Bmw的项,第二次又要求这些项等于CarBrands.Audi——一个枚举值不可能同时是Bmw和Audi,所以最终结果必然是空集合。
正确实现方式
下面是几种可行的写法:
方式1:单个Where中用逻辑或(||)判断
var carBrands = Enum.GetValues(typeof(CarBrands)).Cast<CarBrands>(); var filteredBrands = carBrands.Where(x => x == CarBrands.Bmw || x == CarBrands.Audi).ToList();
方式2:用Contains匹配目标集合
先定义要筛选的目标枚举值集合,再通过Contains判断:
var targetBrands = new List<CarBrands> { CarBrands.Bmw, CarBrands.Audi }; var carBrands = Enum.GetValues(typeof(CarBrands)).Cast<CarBrands>(); var filteredBrands = carBrands.Where(x => targetBrands.Contains(x)).ToList();
方式3:LINQ查询语法写法
var carBrands = Enum.GetValues(typeof(CarBrands)).Cast<CarBrands>(); var filteredBrands = (from brand in carBrands where brand == CarBrands.Bmw || brand == CarBrands.Audi select brand).ToList();
另外提下你代码里的小错误:test2的查询中,from t in carBrands里的carBrands变量未定义,应该用你之前声明的test变量;而且select test2是错误的,应该改为select t。
内容的提问来源于stack exchange,提问作者user1765862
相关产品推荐
相关产品推荐

