2016-08-03 12 views
-2

SQLをLINQに変換しています。誰かがLINQで以下のような部分文字列とcase文を実現する方法を手助けできますか?LINQ to SQLの部分文字列とcase文

SELECT p.goalcommitment, 
     g.goalmeasurement, 
     CASE g.goalmeasurement 
      WHEN 'Count' THEN CAST(p.goalcommitmentnumber AS VARCHAR) 
      WHEN 'Currency' THEN '$' + CAST(p.goalcommitmentcurrency AS VARCHAR) 
      WHEN 'Percentage' THEN RTRIM(CAST(p.goalcommitmentpercentage AS VARCHAR)) + '%' 
      ELSE p.pamwb_goalcommitment 
     END AS goalcommitment, 
     SUBSTRING(p.domainname, CHARINDEX('\', p.domainname, 0) + 1, LEN(p.domainname) - CHARINDEX('\', p.domainname, 0))  
FROM Filtered_psp p 
JOIN Filtered_goalsubtype g 
ON g.goalsubtypeid = p.goalsubtype 

答えて

0

これはあなたのSQLは、LINQで次のようになります方法です。

var query = from p in Filtered_psp 
      join g in Filtered_goalsubtype on p.goalsubtype equals g.goalsubtypeid 
      let slashLocation = p.domainname.IndexOf(@"\") 
      select new 
      { 
       Field1 = p.goalcommitment, 
       Field2 = g.goalmeasurement, 
       Field3 = (p.goalmeasurement == "Count" ? p.goalcommitmentnumber.ToString() : 
          p.goalmeasurement == "Currency" ? "$" + p.goalcommitmentnumber.ToString() : 
          p.goalmeasurement == "Percentage" ? p.goalcommitmentnumber.ToString() + "%" : p.pamwb_goalcommitment), 
       Field4 = slashLocation == -1 ? (p.domainname : p.domainname.Substring(slashLocation + 1, p.domainname.Length - slashLocation - 1))) 
      }; 
+0

インデックスおよび長さは文字列内の場所を参照しなければなりません。パラメータ名:lengthこれはiamが取得する例外です。これがDomian Name "Google \ youtube"の場合私の期待は "youtube"です –

+0

まだドメイン名を取得できません-1を返す予定どおり返信する –

+0

Gilad Greenありがとうございます –

関連する問題