C# 使用case条件将SQL语句转换为LINQ
我在使用LINQ将本机select语句转换为CASE语句时遇到问题 这是在SQL Server中工作的本机SQL:C# 使用case条件将SQL语句转换为LINQ,c#,sql-server,linq,C#,Sql Server,Linq,我在使用LINQ将本机select语句转换为CASE语句时遇到问题 这是在SQL Server中工作的本机SQL: select v.vehl_ContainerNo as cont_name, v.vehl_Name, v.vehl_drivername, v.vehl_entrancedate, v.vehl_customsdec, c.Capt_AR as VehicleState, case when v.vehl_rampid is n
select
v.vehl_ContainerNo as cont_name, v.vehl_Name,
v.vehl_drivername, v.vehl_entrancedate, v.vehl_customsdec,
c.Capt_AR as VehicleState,
case
when v.vehl_rampid is null
then ''
else (select ramp_Name
from Ramp
where ramp_RampID = v.vehl_rampid)
end as cont_rampid
from
Vehicle v, Custom_Captions c
where
v.vehl_state = c.Capt_Code
and c.Capt_Family = 'vehl_state'
and v.vehl_ClearanceCompany = 471
我想知道ramp_的名字:
- 如果vehl_rampid为null,则返回空字符串
- 否则,执行另一个select语句,从vehl_rampid等于ramp_rampid的ramp表中获取ramp_名称
//List<qryRslt> query = (from v in db.Vehicles
// join cus in db.Custom_Captions on v.vehl_state equals cus.Capt_Code
// join ram in db.Ramps on v.vehl_rampid equals ram.ramp_RampID
// where
// cus.Capt_Family == "vehl_state" && v.vehl_Deleted == null && v.vehl_ClearanceCompany == p.pusr_CompanyId
// select new qryRslt
// {
// vehl_ContainerNo = v.vehl_ContainerNo,
// vehl_Name = v.vehl_Name,
// vehl_drivername=v.vehl_drivername,
// vehl_entrancedate=v.vehl_entrancedate,
// vehl_customsdec=v.vehl_customsdec,
// VehicleState=v.vehl_state,
// cont_rampid=v.vehl_rampid==null?" ":ram.ramp_Name
// }).ToList();
//列表查询=(来自db.Vehicles中的v
//在v.vehl_状态的db.Custom_标题中加入cus等于cus.Capt_代码
//将ram连接到db中。v.vehl_rampid上的Ramps等于ram.ramp_rampid
//在哪里
//cus.Capt_Family==“vehl_state”和&v.vehl_Deleted==null和&v.vehl_ClearanceCompany==p.pusr_CompanyId
//选择新的qryRslt
// {
//vehl_ContainerNo=v.vehl_ContainerNo,
//vehl_Name=v.vehl_Name,
//vehl_drivername=v.vehl_drivername,
//vehl_进入日期=v.vehl_进入日期,
//vehl_customsdec=v.vehl_customsdec,
//车辆状态=车辆状态,
//cont\U rampid=v.vehl\U rampid=null?“:ram.ramp\u名称
//}).ToList();
它给了我一个与SQLServer中编写的本机sql语句不同的意外结果
如何使用另一个sql in case语句实现sql语句?这取决于返回的内容。假设您正在尝试返回类:
MyClass
然后LINQ看起来像:
List<MyClass> result = (from c in Vehicle
from x in Custom_Captions
join z in Ramp on c.vehl_rampId equals z.ramp_RampID
where c.vehl_state == x.Capt_Code
&& x.Capt_Family == 'vehl_state'
&& c.vehl_ClearanceCompany == 471
select new MyClass{
prop1 = c.vehl_rampid is null ? "" : z.ramp_Name
}).ToList();
列表结果=(来自车辆中的c
从自定义标题中的x开始
将z连接到c.vehl_rampId上的斜坡等于z.Ramp_rampId
其中c.vehl_state==x.Capt_代码
&&x.Capt_Family=='vehl_state'
&&c.vehl_ClearanceCompany==471
选择新MyClass{
prop1=c.vehl\U rampid为空?“:z.ramp\U名称
}).ToList();
上面的代码使用
对象初始化器
通过填充对象的所有属性来定义对象。请同时添加您尝试的LINQ代码。如果您试图从…中…选择而不是c.vehl\u rampid
添加另一个对象,这很可能会成为OP需要的答案。我尝试这样做,但它给了我一个答案当我尝试在v.vehl\u rampid=ram.ramp\u rampid
上加入ramps表,并选择以下选项时,针对sql server的不同输出:cont\u rampid=v.vehl\u rampid==null?”:ram.ramp_Name
我想问题是当我使用车辆连接坡道时感谢您更新您的答案,但结果与sql server中的结果不同如何在另一个sql语句中执行select语句?可能是因为该查询执行内部连接。您是否希望车辆没有相应的自定义标题?我认为这是内部连接的问题,因此在本机SQL中我使用了两个SQL语句,但我不知道如何在LINQ中实现这一点