2011-06-16 33 views
3

我有一個只讀給我的linq表「KUND」。它有一些特殊的字符,我已經寫了一個函數將它們切換到我想要的。LINQ - 爲datacontext添加函數

public static string changeSpecialCharacters(string kund) 
    { 
     StringBuilder b = new StringBuilder(kund); 

     b = b.Replace("Õ", "å"); 
     b = b.Replace("┼", "Å"); 
     b = b.Replace("õ", "ä"); 
     b = b.Replace("─", "Ä"); 
     b = b.Replace("÷", "ö"); 
     b = b.Replace("Í", "Ö"); 
     b = b.Replace("'", " "); 
     b = b.Replace("¦", "´"); 
     b = b.Replace("Ï", "Ø"); 

     return b.ToString(); 
    } 

我現在有兩個問題:

1我可以在自動生成的DataContext這個功能添加到GET所以我沒有打電話給它在我的代碼?我添加了它,但它似乎被刪除,只要我改變我的datacontext是如何(添加/刪除表)。 2任何建議如何使速度方面的功能更好?

回答

3

切勿編輯.designer.cs;相反,添加文件,並使用partial class添加方法,例如:

namespace Your.Namespace 
{ 
    partial class YourDataContext 
    { 
     // your methods here 
    } 
} 

否;你不能把它添加到get。另一種選擇,雖然是一個擴展方法:

namespace Some.Utility.Namespace 
{ 
    public static class SomeUtilityClass 
    { 
     public static string ChangeSpecialCharacters(this string kund) 
     { ... } // note the "this" in the above line 
    } 
} 

現在你可以使用:

string name = obj.Name.ChangeSpecialCharacters(); 

個人而言,我會重命名此澄清變化方向,並有兩個方法: - 一個編碼,一個解碼。


重做一組數據;也許是:

public static IEnumerable<SomeType> ChangeSpecialCharacters(
    this IEnumerable<SomeType> items) 
{ 
    foreach(var item in items) 
    { 
     item.Name = item.Name.ChangeSpecialCharacters(); 
     item.Foo = item.Foo.ChangeSpecialCharacters(); 
     ... 
     item.Bar = item.Bar.ChangeSpecialCharacters(); 
     yield return item; 
    } 
} 
+0

我怎麼能做到這一點,而不是整個對象?有點像'名單昆德=新名單().changeSpecialCharacters();' – Andreas 2011-06-16 11:40:11

+0

@Andreas - 你會在'名單編寫擴展方法'(或者'IEnumerable的'是遍歷記錄更改需要的屬性 – 2011-06-16 11:41:50

+0

你可以提供一個代碼示例嗎?我從來沒有不這樣做,並不能讓它在工作時嘗試.. – Andreas 2011-06-16 13:36:03

0

或許你可以初始化變量:

private string kund; 
public string Kund 
{ 
    get 
    { 
     return changeSpecialCharacters(string kund); 
    } 
    set 
    { 
     kund = value; 
    } 
} 
+0

但是,如果我得到一個列表,然後數據綁定它...然後我沒有辦法使用ext方法嗎?我可以讓ext方法遍歷所有項目並調用函數嗎?所以我能夠做到這一點名單 kunder =新的新名單( ).changeSpecialCharacters(); ? – Andreas 2011-06-16 11:22:21