Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用&;向Where语句添加不同数量的表达式&;和| |在C#/.NET中?_C#_.net_Entity Framework_Linq_Lambda - Fatal编程技术网

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

如何使用&;向Where语句添加不同数量的表达式&;和| |在C#/.NET中?,c#,.net,entity-framework,linq,lambda,C#,.net,Entity Framework,Linq,Lambda,我需要返回类似于dynamicali的内容,它将来可能不仅仅有大小或类型,例如: Where((x => x.Sizes == "Small" || x => x.Sizes == "Medium" || x => x.Sizes == "Big") && (x => x.Types == "normal" || x => x.Types == "extra&

我需要返回类似于dynamicali的内容,它将来可能不仅仅有大小或类型,例如:

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

database.table.Where(e=>size.Contains(e.size))

注意
A | B | C&D | e | F
等同于
A | B |(C&D)| e | F
数据库.table.Where(x=>size.Contains(x.size)),并将其扩展以测试类型。这样一来,枚举表中的值的数量就变得无关紧要了。
var items=database.table.Where(x=>size.Contains(x.size)&&types.Contains(x.types))
你不会用SQL写这样的代码,你应该用('A','B','C')写
Where size(A','B','C')
。LINQ中的等价物是
someList.Contains(field)
,例如
size.Contains(x.size)
。EF将从生成一个
IN
子句this@Cid我的意思是在开始时和之前使用()&&Where是
listFromWebRequest
的来源?还有,这实际上是如何解决OP过滤类型和大小的问题的呢?
listFromWebRequest
是OP指定的来自QP的大小数组或类型数组,换句话说,来自webrequest。这是动态的,如果我们想添加新的尺寸或类型,他可以将它们添加到那些列表中——它们可以是静态的,不管我怎么想。为了使它更具动态性,您可以在Where过滤器中循环使用一个列表列表——这样,您就可以在某个地方拥有一个静态列表,而不必接触实现
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));
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)));