我相信有更好的方式来写这个,但我遇到了心理障碍.
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;
Run Code Online (Sandbox Code Playgroud)
是否有更好的方式来编写OR语句?我试过了:
x.FavoriteColor == "Green" || "Blue" || "Red"
Run Code Online (Sandbox Code Playgroud)
但编译说 Operator || cannot be applied to operands of type 'bool' and 'string'
任何帮助表示赞赏.
您可以使用array/list/hashset的Contains方法.
var colors = new List<string> {"Green", "Red", "Blue" };
db.Table.Where(x => x.FavoriteSport == "Baseball" &&
(colors.Contains (x.FavoriteColor)).Count()
Run Code Online (Sandbox Code Playgroud)
它将生成SQL查询
SELECT ... WHERE FavoriteColor = 'Baseball' AND FavoriteColor in ("Green", "Red", "Blue")
Run Code Online (Sandbox Code Playgroud)
我想补充一点,如果你使用存储在内存中的数据集,你应该记住List的Contains需要O(N)迭代来获得结果.因此,如果colors包含大量元素,则应使用集合HashSet而不是O(1).
var colors = new HashSet<string> {"Green", "Red", "Blue", .... };
someDataSet.Where(x => x.FavoriteSport == "Baseball" &&
(colors.Contains (x.FavoriteColor)).Count()
Run Code Online (Sandbox Code Playgroud)
您可以在此处找到List-HashSet性能比较
| 归档时间: |
|
| 查看次数: |
4250 次 |
| 最近记录: |