如何在C#中使用LINQ筛选颜色为红色和蓝色的Car对象?
正确筛选Color为Red或Blue的LINQ查询写法
错误原因分析
你当前的写法query = query.Where(at => at.Color == Color.Red + Color.Blue);存在逻辑错误:直接对枚举值做加法会将它们的底层数值相加(Color.Red对应1,Color.Blue对应2,相加后结果为3,即Color.Pink),完全不符合你要的“或”筛选逻辑。
正确写法
写法一:直接用逻辑或判断
这是最直观的方式,适合筛选值较少的场景:
query = query.Where(car => car.Color == Color.Red || car.Color == Color.Blue);
写法二:用集合包含判断
如果需要筛选的枚举值较多,可先定义目标集合,再用Contains方法判断,代码更易维护:
var targetColors = new List<Color> { Color.Red, Color.Blue }; query = query.Where(car => targetColors.Contains(car.Color));
写法三:位运算(仅适用于标记枚举)
注意:你的Color枚举未标记[Flags]特性,且数值不是2的幂次,因此这种方法当前不适用。若后续将枚举修改为标记枚举:
[Flags] public enum Color { Red = 1, Blue = 2, Pink = 4, Orange = 8, }
可使用位运算筛选:
query = query.Where(car => (car.Color & (Color.Red | Color.Blue)) != 0);
内容的提问来源于stack exchange,提问作者KrzysztofBojarczuk
相关产品推荐
相关产品推荐

