2016-11-30 70 views
-2

我在使用LINQ轉換CASE語句的本機select語句時遇到問題。將SQL語句轉換爲具有case條件的LINQ

這是在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_name:

  • 如果vehl_rampid爲null,則返回一個空字符串

  • 否則會執行另一個select語句以從rampl表中得到ramp_name,其中vehl_rampid等於ramp_rampid。

當我用下面的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(); 

它給了我一個意外的結果,從寫在SQL Server本機SQL語句的不同

我怎樣才能實現與另一個SQL語句sql在case語句中?

+0

請添加您嘗試的LINQ代碼。 –

回答

0

這取決於你回來。讓我們假設你正在試圖返回類: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(); 

上面的代碼使用Object Initialiser填充它的所有屬性來定義對象。

+0

如果你想添加另一個'from ... where ... select'而不是'c.vehl_rampid',這很可能會變成OP需要的答案。 –

+0

我試圖做到這一點,但它給了我不同的輸出與sql服務器,當我試圖加入'v.vehl_rampid等於ram.ramp_RampID'坡道表,並且當選擇以下內容: 'cont_rampid = v.vehl_rampid == null?「」:ram.ramp_Name' 我認爲問題是當我加入車輛坡道 –

+0

感謝您更新您的答案,但結果不同於在sql服務器的結果我怎麼做select語句在另一個sql語句?? –