C# 使用OR运算符的Lambda表达式

C# 使用OR运算符的Lambda表达式,c#,lambda,C#,Lambda,我相信有更好的方法来写这篇文章,但我遇到了一个心理障碍 int num = 0; using(var db = new TestDB()) { num = db.Table.Where(x => x.FavoriteSport == "Baseball" && (x.FavoriteColor == "Green" || x.FavoriteCo

我相信有更好的方法来写这篇文章,但我遇到了一个心理障碍

int num = 0;

using(var db = new TestDB())
{
    num = db.Table.Where(x => x.FavoriteSport == "Baseball" &&
                             (x.FavoriteColor == "Green" || 
                              x.FavoriteColor == "Blue" || 
                              x.FavoriteColor == "Red")).Count();
}

return num;
有没有更好的方法来编写
语句?我试过:

x.FavoriteColor == "Green" || "Blue" || "Red"
但是编译器说,
运算符| |不能应用于'bool'和'string'类型的操作数。

非常感谢您的帮助。

您可以使用array/list/hashset方法

var colors = new List<string> {"Green", "Red", "Blue" };

db.Table.Where(x => x.FavoriteSport == "Baseball" &&
                         (colors.Contains (x.FavoriteColor)).Count()
我想补充一点,如果您使用存储在内存中的数据集,您应该记住列表的
包含
需要O(N)次迭代才能得到结果。因此,如果
colors
包含大量元素,则应使用set代替O(1)

var colors=新哈希集{“绿色”、“红色”、“蓝色”…};
someDataSet.Where(x=>x.FavoriteSport==“棒球”&&
(colors.Contains(x.FavoriteColor)).Count()

您可以找到列表哈希集性能比较

您可以使用对象容器并使用Contains方法。例如:

var favoriteColors = new List<string>
{
   "Blue", "Green", "Red"
};
var num = 0;

using(var db = new TestDB())
{
  num = db.Table.Where(x => x.FavoriteSport == "Baseball" && favoriteColors.Contains(x.FavoriteColor)).Count();
}
var favoriteColors=新列表
{
“蓝色”、“绿色”、“红色”
};
var num=0;
使用(var db=new TestDB())
{
num=db.Table.Where(x=>x.FavoriteSport==“Basketball”&&FavoriteColor.Contains(x.FavoriteColor)).Count();
}

我会检查一个配置文件,以确保生成的SQL使用的是IN语句。

与大家所说的差不多-您可以创建一个有效字符串的集合,并查看您的字符串是否在该集合中。您可以内联执行此操作:

num = db.Table.Count(x => x.FavoriteSport == "Baseball" &&
                       new []{"Green","Red","Blue"}.Contains(x.FavoriteColor);

值得注意的是,您可以直接将
Where
替换为
Count
,以获得可读性。我相信您当前的示例既可读又可维护。这没有错。请注意,如果
using
return
语句之间没有任何差异,您可以执行
return db.Table.W这里…
感谢大家的快速评论和回答。我没想到所有这些答案都会这么快出现哈哈,但我想这就是为什么#1是这样的。@默认感谢注释。我一定会使用它。谢谢again@Servy很好,我没有注意到。删除了注释以避免混淆。在我看来,总是先展示最好的示例。你没有需要编辑到答案的结尾。出于好奇,哈希集会提高性能吗?这是一个对数据库的查询,它被转换为动态SQL,因此无论如何都应该遍历整个集合。@Valentin好的,我在内存中同意,通过哈希集进行搜索更有效(有时)。我想说的是,这个命令应该生成SQL(即,OP使用EF)。生成的查询应该是“选择…其中FavoriteSport=“棒球”和FavoriteColor IN(红色”、“蓝色”、“绿色”)它将不得不遍历整个集合来生成In语句。@ DerkVaCuyk是的,谢谢。因为我认为这两种情况都以相同的性能构建相同的SQL查询。
string[] FavColor = new string[]{"Green","Red","Blue"};

int num = 0;

    using(var db = new TestDB())
    {
        num = db.Table.Where(x => x.FavoriteSport == "Baseball" &&FavColor.Any(x.FavoriteSport)).Count();
    }

    return num;
var favoriteColors = new List<string>
{
   "Blue", "Green", "Red"
};
var num = 0;

using(var db = new TestDB())
{
  num = db.Table.Where(x => x.FavoriteSport == "Baseball" && favoriteColors.Contains(x.FavoriteColor)).Count();
}
num = db.Table.Count(x => x.FavoriteSport == "Baseball" &&
                       new []{"Green","Red","Blue"}.Contains(x.FavoriteColor);