如何使用 && 和 || 向 Where 语句添加不同数量的表达式在 C#/.NET 中?



我需要返回类似于这个dynamiccaly的东西,它将来可能不仅仅有大小或类型,例如:

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", ...}

这些列表可能会更大,稍后可能会添加其他列表。

我有我的参数,我想从我的网址过滤,像这个?types=normal,extra&sizes=big,smalltypessizesstring,所以我只是把它们和.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...))
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)));

database.table.Where(e=>sizes.Contains(e.sizes((

最新更新