You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:16:01