LINQ - 向datacontext添加函数

时间:2011-06-16 09:53:41

标签: c# linq datacontext stringbuilder

我有一个只读给我的linq表“KUND”。它有一些特殊的字符,我已经写了一个功能,将它们切换到我想要的。

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有关如何在速度方面提高功能的任何建议吗?

2 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:0)

可能您可以将变量初始化为:

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