首页 > 解决方案 > 如何使用 && 和 || 向 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,smalltypes所以我sizes只是string用这种方式拆分它们,.Split(',');我得到一个string[] sizesstring[] 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...))

标签: c#.netentity-frameworklinqlambda

解决方案


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)));

推荐阅读