使用 OR 运算符的 Lambda 表达式
本文关键字:Lambda 表达式 运算符 OR 使用 | 更新日期: 2023-09-27 18:36:53
我相信有更好的方法来写这个,但我正在经历一个心理障碍。
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;
有没有更好的方法来编写OR
语句?我试过:
x.FavoriteColor == "Green" || "Blue" || "Red"
但编译器说Operator || cannot be applied to operands of type 'bool' and 'string'
任何帮助,不胜感激。
您可以使用包含数组/列表/哈希集的方法。
var colors = new List<string> {"Green", "Red", "Blue" };
db.Table.Where(x => x.FavoriteSport == "Baseball" &&
(colors.Contains (x.FavoriteColor)).Count()
它将生成像
SELECT ... WHERE FavoriteColor = 'Baseball' AND FavoriteColor in ("Green", "Red", "Blue")
我想补充一点,如果您使用存储在内存中的数据集,您应该记住,List的Contains
需要O(N)迭代才能获得结果。因此,如果colors
包含很多元素,您应该使用 set HashSet 代替 O(1)。
var colors = new HashSet<string> {"Green", "Red", "Blue", .... };
someDataSet.Where(x => x.FavoriteSport == "Baseball" &&
(colors.Contains (x.FavoriteColor)).Count()
您可以在此处找到列表-哈希集性能比较
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;
可以使用对象的容器并使用 Include 方法。例如:
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();
}
我会检查配置文件以确保生成的 SQL 使用的是 IN 语句。
几乎每个人都说的 - 您可以创建有效字符串的集合,并查看您的字符串是否在该集合中。 您可以内联执行此操作:
num = db.Table.Count(x => x.FavoriteSport == "Baseball" &&
new []{"Green","Red","Blue"}.Contains(x.FavoriteColor);
值得注意的是,您可以直接将Where
换成Count