根据 LINQ 中的条件更改联接类型

杰森

例如我有这样一个连接:

from cust in customerList 
join prod in productList on cust.ProductId equals prod.Id
join veh in vehicleList on prod.VehicleId equals veh.Id into v
from veh in v.DefaultIfEmpty()
select new {customerName = cust.Name, customerVehicle=veh.VehicleName}

如您所见,第三行和第四行有一个右连接。我想以参数化的方式进行连接。我的意思是,如果我有一个变量,我想将连接更改为:

string x ="right";

if(x == right) //execute right join
{
    from cust in customerList 
    join prod in productList on cust.ProductId equals prod.Id
    join veh in vehicleList on prod.VehicleId equals veh.Id into v
    from veh in v.DefaultIfEmpty()
    select new {customerName = cust.Name, customerVehicle=veh.VehicleName}
}
else //execute inner join
{
    from cust in customerList 
    join prod in productList on cust.ProductId equals prod.Id
    join veh in vehicleList on prod.VehicleId equals veh.Id 
    select new {customerName = cust.Name, customerVehicle=veh.VehicleName}
}

我可以用一个if语句来做到这一点,但我认为代码太多,重复太多。那么我可以join在行内使用三元运算符应用这个条件吗?提前致谢。

编辑 :

正如我所说,我可以使用此问题中建议的 if 语句来完成此操作但是我的原始代码包含 13 个嵌套连接。因此,为每种可能性编写 if 会导致代码非常丑陋。你能帮我解决这个问题吗?

卡里鱼

尝试代码

string x ="right";

var result= (from cust in customerList 
join prod in productList on cust.ProductId equals prod.Id
join veh in vehicleList on prod.VehicleId equals veh.Id into v
from veh in v.DefaultIfEmpty()
select new {customerName = cust.Name,customerVehicle=veh.VehicleName}).ToList();

if(x=="right")
result=result.Where(c=>c.customerVehicle!=null).ToList();

X==right Then Null value is Removed 结果否则结果默认左连接

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章