2016-11-30 12 views
-2

LINQを使用してCASEステートメントでネイティブのSELECTステートメントを変換する際に問題があります。ケースステートメントでSQLステートメントを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の場合、空の文字列に

  • を返します

    else別のselect文を実行して、vehl_rampidとramp_rampidが等しいランプテーブルからramp_nameを取得します。

私は、次の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?

+0

LINQコードも試してください。 –

答えて

0

返品によって異なります。あなたがクラスを返すようにしようとしていると仮定しましょう:コードの上

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を使用している:MyClass

はその後LINQは、希望のようになります。

+0

これは、 'c.vehl_rampid'の代わりに' ... ... where ... select'を追加するとOPが必要とする答えに変わります。 –

+0

私はそれをやろうとしましたが、 'v.vehl_rampid equals ram.ramp_RampID'でrampsテーブルに参加しようとしたときにSQL Serverとは異なる出力を得ました。そして、次を選択したとき: ' cont_rampid = v.vehl_rampid == null? "":ram.ramp_Name' 車とのランプに参加するときの問題だと思います。 –

+0

回答を更新していただきありがとうございますが、結果はSQL Serverのものとは異なります。どのように別のSQL文?? –