Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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
C# Linq中Where子句的使用条件_C#_Sql_Linq - Fatal编程技术网

C# Linq中Where子句的使用条件

C# Linq中Where子句的使用条件,c#,sql,linq,C#,Sql,Linq,在Where子句中如何使用条件 用户可以从列表中选择区段、产品和型号,并查看结果。 我在所有字段中添加了一个项目See All,如果用户选择See All,他可以在所有部分中看到所有产品。所以我想写 如果每个属性都等于-1点,则检查值的查询将引入where条件 //My Model struct Model { public int SectionCode{get;set;} public int ProductCode{get;set;} public int ModelCode{get;se

在Where子句中如何使用条件

用户可以从列表中选择区段、产品和型号,并查看结果。 我在所有字段中添加了一个项目
See All
,如果用户选择
See All
,他可以在所有部分中看到所有产品。所以我想写 如果每个属性都等于-1点,则检查值的查询将引入where条件

//My Model
struct Model
{
public int SectionCode{get;set;}
public int ProductCode{get;set;}
public int ModelCode{get;set;}
}

var query=DBContext.Model.Where(data=>data.ModelCode==_ModelCode//if ModelCode!=-1 
&& ProductCode==_ProductCode//if ProductCode!=-1  
&& SectionCode==_SectionCode//if SectionCode!=-1 ) 
我知道我可以用一些
if
来写它,但我必须检查很多条件。所以我想知道,我如何在where子句中写if?

试试这个:

var query=DBContext.Model.Where(data => (ModelCode == -1 || data.ModelCode == _ModelCode) 
&& (ProductCode == -1 || ProductCode == _ProductCode)
&& (SectionCode == -1 || SectionCode == _SectionCode) 

您可以使用逻辑运算符实现这一点:

var query = DBContext.Model.Where(data =>
    (_ModelCode   == -1 || data.ModelCode == _ModelCode)
 && (_ProductCode == -1 || data.ProductCode == _ProductCode)
 && (_SectionCode == -1 || data.SectionCode == _SectionCode))

如果不需要where子句,请不要添加它,即:

IQueryable<Model> query = DBContext.Model;

if(_ModelCode != -1)
{
    query = query.Where(data=>data.ModelCode==_ModelCode);
} 

if(_ProductCode!= -1)
{
    query = query.Where(data=>data.ProductCode==_ProductCode);
} 

if(_SectionCode!= -1)
{
    query = query.Where(data=>data.SectionCode==_SectionCode);
} 
IQueryable query=DBContext.Model;
如果(_ModelCode!=-1)
{
query=query.Where(data=>data.ModelCode==\u ModelCode);
} 
如果(_ProductCode!=-1)
{
query=query.Where(data=>data.ProductCode==\u ProductCode);
} 
如果(_SectionCode!=-1)
{
query=query.Where(data=>data.SectionCode==\u SectionCode);
} 

+1:这个答案比我的好。但是,如果不显式指定查询类型,它可能不会编译。@IRSOG查询中的where子句是链接的-即,首先按_ModelCode筛选,如果它不是-1,然后按_ProductCode筛选第一次筛选的结果,如果它不是-1,然后按_SectionCode筛选结果,如果它不是-1。如果“\u ProductCode和\u SectionCode为-1”,则只能使用ModelCode筛选模型。如果_ProductCode和_ModelCode都不是-1,那么您的查询将被_ProductCode和_ModelCode@IRSOG换句话说,它“跳过-1”项的条件@Douglas,谢谢!我相信它应该按原样编译(我希望DBContext.Model是IQueryable),尽管我当然没有尝试这个特定的示例。@Isantipov:这取决于ORM技术。LINQtoSQL返回一个实现
IQueryable
的具体类型,需要将该类型转换到
var
声明的接口,以允许进一步的重新分配。