c# - 如何使用 && 和 || 向 Where 语句添加不同数量的表达式 在 C#/.NET 中?
问题描述
我需要动态地返回这样的东西,它将来可能不仅仅是大小或类型,例如:
Where((x => x.Sizes == "Small" || x => x.Sizes == "Medium" || x => x.Sizes == "Big") &&
(x => x.Types == "normal" || x => x.Types == "extra" || x => x.Types == "Spicy"))
从我的尺寸和类型列表中:
List<string> Sizes { "Small", "Medium", "Big", ...}
List<string> Types { "Normal", "Extra", "Spicy", ...}
这些列表可能更大,以后可能会添加其他列表。
我有我的参数,我想像这样从我的 url 中过滤?types=normal,extra&sizes=big,small
。
types
所以我sizes
只是string
用这种方式拆分它们,.Split(',');
我得到一个string[] sizes
和string[] types
这两个数组是动态大小的,可能有 0 甚至 50 个字符串。我想返回与我创建的数组中的大小匹配的所有大小。
所以我们回到开始,但我必须使用这两个(或更多)数组并遍历它们。
database.table.Where(
(x => x.Sizes == sizes[0] || x => x.Sizes == sizes[1] || so on ...)
&&
(x => x.Types == types[0]|| x => x.Types == types[1] || so on...))
解决方案
var sizes = new List<string>() {"Small", "Medium", "Large"};
var filteredList = listFromWebRequest.Where(x => sizes.Contains(x));
编辑:下面的实现将是完全动态的——filters
列表现在可以保存在其他地方,并被设为静态。
var queryParameters = new List<string>() {"Nike", "Tree", "Large"};
var sizes = new List<string>() {"Small", "Medium", "Large"};
var brands = new List<string>() {"Adidas", "Nike", "Puma"};
var filters = new List<List<string>>() {sizes, brands};
var filteredList = queryParameters.Where(x => filters.Any(y => y.Contains(x)));
推荐阅读
- java - 向量替换自身内部的值而不访问它
- c# - C# 比较类型是否相等,将这些类型作为参数
- c# - 如何使用 linq 查询多个?
- google-analytics - 页面访问者在他们登陆 UTM 活动页面后去 - GA
- r - 如何排斥在ggplot中只添加一个标签
- python - Cygwin 不运行在 Visual Studio Code 中创建的 .py 和 .sh 文件
- django - 未加载到模板中的静态文件
- javascript - 通过带参数的函数调用for循环
- android - RecyclerView:在转换片段期间调用 notifyDataSetChanged == 冻结
- python - 在 Python 中正确组织代码:在多个模块中使用相同的数据/变量