例如我有这样一个连接:
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] 删除。
我来说两句