Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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# 使用case条件将SQL语句转换为LINQ_C#_Sql Server_Linq - Fatal编程技术网

C# 使用case条件将SQL语句转换为LINQ

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

我在使用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 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_名称

当我使用以下linq语句时:

//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中实现这一点