Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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# 通过避免if-else条件优化linq_C#_Linq_Entity Framework - Fatal编程技术网

C# 通过避免if-else条件优化linq

C# 通过避免if-else条件优化linq,c#,linq,entity-framework,C#,Linq,Entity Framework,我有一个关于性别的下拉列表 男性的选择值为1,女性的选择值为2 根据所选的值,我需要从数据库中检索数据 if (ddlGender==1) { var data= (from item in dbContext.Sample where item.locId > 100 select item); } else { var data= (from item in dbContext.Sample where item.locId <100 select item);

我有一个关于性别的下拉列表

男性的选择值为
1
,女性的选择值为
2

根据所选的值,我需要从数据库中检索数据

if (ddlGender==1)
{
    var data= (from item in dbContext.Sample where item.locId > 100 select item);
}
else
{
    var data= (from item in dbContext.Sample where item.locId <100 select item);
}
if(ddlegender==1)
{
var data=(来自dbContext.Sample中的项,其中item.locId>100选择项);
}
其他的
{
var data=(来自dbContext.Sample中的项,其中item.locId请尝试以下操作

var data = from item in dbContect.Sample 
where (item.locId > 100 && ddlGender == 1) || 
(item.locId < 100 && ddlGender != 1)
select item
var data=来自dbContect.Sample中的项
式中(item.locId>100&&ddlGender==1)|
(item.locId<100&&ddlegender!=1)
选择项
试试这个

var data = from item in dbContect.Sample 
where (item.locId > 100 && ddlGender == 1) || 
(item.locId < 100 && ddlGender != 1)
select item
var data=来自dbContect.Sample中的项
式中(item.locId>100&&ddlGender==1)|
(item.locId<100&&ddlegender!=1)
选择项

另一个选项是使用过滤器和三元运算符组合查询:

var data = dbContext.Sample;
data = (ddlGender == 1) ? data.Where(i => i.locId > 100) 
                        : data.Where(i => i.locId < 100);
如果您要添加复杂条件,它将被转换为SQL

(item.locId > 100 && ddlGender == 1) || (item.locId < 100 && ddlGender != 1)
(item.locId>100&&ddlGender==1)| |(item.locId<100&&ddlGender!=1)
将转换为以下带有两个参数的查询(假设数据库中有不可为空的字段locId)

选择[Extent1].[locId]作为[locId],
[Extent1].[Foo]作为[Foo],
[extend1].[Bar]作为[Bar]
从[dbo].[Sample]到[Extent1]
其中([Extent1].[locId]>100)和(1=@p_linq_0)和(@p_linq_0不为空))
或([Extent1].[locId]<100)和
(NOT((1=@p_linq_1)和(@p_linq_1不为NULL)))

另一个选项是使用过滤器和三元运算符组合查询:

var data = dbContext.Sample;
data = (ddlGender == 1) ? data.Where(i => i.locId > 100) 
                        : data.Where(i => i.locId < 100);
如果您要添加复杂条件,它将被转换为SQL

(item.locId > 100 && ddlGender == 1) || (item.locId < 100 && ddlGender != 1)
(item.locId>100&&ddlGender==1)| |(item.locId<100&&ddlGender!=1)
将转换为以下带有两个参数的查询(假设数据库中有不可为空的字段locId)

选择[Extent1].[locId]作为[locId],
[Extent1].[Foo]作为[Foo],
[extend1].[Bar]作为[Bar]
从[dbo].[Sample]到[Extent1]
其中([Extent1].[locId]>100)和(1=@p_linq_0)和(@p_linq_0不为空))
或([Extent1].[locId]<100)和
(NOT((1=@p_linq_1)和(@p_linq_1不为NULL)))


在这里,您无法避免某种情况。除非必要,否则不要进行优化。此代码不是瓶颈的来源,即使您避免了这种情况,您也不会获得任何好处。我不确定您为什么要“优化”去掉
if
语句。与数据访问相比,它几乎是瞬时的。我认为你得到的很好。你想如何在没有条件语句的情况下编程?这是每种编程语言的基础。我在考虑Lambda表达式,但由于
ddlegender
不在查询范围内,因此试图解决我们的问题在查询中,它需要一个
if
子句。在这里你不能避免某种情况。除非必要,否则不要进行优化。这段代码不是瓶颈的来源,即使你避免了这种情况,你也不会得到任何东西。我不确定你为什么要“优化”去掉
if
语句。与数据访问相比,它几乎是瞬时的。我认为你得到的很好。你想如何在没有条件语句的情况下编程?这是每种编程语言的基础。我在考虑Lambda表达式,但由于
ddlegender
不在查询范围内,因此试图解决我们的问题e查询内部需要一个
if
子句+1来删除if-else,但这会影响性能,因为对每个项执行的条件都会增加吗?如果目的是在linq中有一个查询,这是一个可能的解决方案。对于增加的性能,取决于表中有多少项。可能有如果只有几行,则可以忽略少量的增加。我认为此代码的性能将比原始代码差。原始代码将导致在数据库上执行两个简单查询中的一个,具体取决于
ddlegender
的值。此代码不必将决策推送到数据库服务器,从而生成更复杂的查询。+1表示r如果不是,这会影响性能吗?如果目的是在linq中有一个查询,这是一个可能的解决方案。对于增加的性能,取决于表中有多少项。如果只有几行,可能会有一个小的增加,可以忽略不计。我认为这是一个可行的解决方案de的性能比原始代码差。原始代码将导致在数据库上执行两个简单查询中的一个,具体取决于
ddlegender
的值。此代码不需要将决策推送到数据库服务器,从而生成更复杂的查询。+1。这并不是真正的“优化”原始代码(虽然这是非常优化的),但它更简短、更整洁。@BenM谢谢!事实上,我说的是优化代码,这里的另一个答案有-当你在where语句中添加所有条件时,我将更新答案,使其指向:)+1。这并不是真的“优化”原始代码(这是非常优化的),但它又短又整洁。@BenM谢谢!事实上,我刚才说的是优化代码,这里的另一个答案是——当你们在where语句中添加所有条件时,我会更新答案,使之更简洁:)