2013-03-22 14 views
-2

我有一個需要轉換爲C#的SQL函數。 SQL函數使用LIKE關鍵字和通配符'_'。我如何編寫等效的C#函數? 下面是SQL函數:C#中SQL的LIKE和_通配符的等價物

Create Function [dbo].[fnGetWarehouseByGrade222] 
( 
    @Grade nvarchar(2), 
    @Paste nvarchar(500) 
) 
Returns varchar(500) 

As 
Begin 
    declare @Return varchar(500) 
    if @Grade = '00' or @Grade = '01' or @Grade = '02' or @Grade = '03' or @Grade = '04' 
    begin 
    Select @Return = case when @Paste like 'D__G__DG' then '1GD' 
          when @Paste like 'D__G__DP' then '1GD' 
          when @Paste like 'D__G__D_' then '1GO' 
          when @Paste like 'N__G__D_' then '1GN' 
          when @Paste like 'D__G__H_' then '1GH' 
          when @Paste like 'N__G__H_' then '1GM' 
          when @Paste like 'G__G__H_' then '1GG' end                
    RETURN @Return 
    end 
    RETURN null 
End 
+2

你試了一下?你有什麼麻煩? – SLaks 2013-03-22 01:25:28

+0

原因使用SQL函數速度不快。我想用SQL CLR。 – 2013-03-22 01:39:30

+0

這個SQL函數不會很慢。它正在進行所有內存操作。你確定這是你的瓶頸嗎?你測過它了嗎?調用SQL CLR可能需要更多的CPU週期。 – rein 2013-03-22 01:47:12

回答

3

我直接在留言框中寫這個(所以這個功能可能無法編譯),但你應該使用正則表達式。類似的東西應該工作:

string GetWarehousByGrade222(string grade, string paste) 
{ 
    if (grade == "00" || grade == "01" || grade == "02" || grade == "03" || grade == "04") { 
    if (Regex.IsMatch(paste, "D..G..DG")) return "1GD"; 
    if (Regex.IsMatch(paste, "D..G..DP")) return "1GD"; 
    if (Regex.IsMatch(paste, "D..G..D.")) return "1GO"; 
    // etc... 
    } 
    return null; 
}