我如何为System.Data.Linq.Table <t>?</t>编写扩展方法

时间:2011-10-28 15:45:35

标签: c# linq-to-sql extension-methods

我想为一些一次性测试/控制台应用程序编写这个小而简单的扩展方法,但我还没弄清楚如何正确获取方法签名。我想将此添加到我拥有的每个System.Data.Linq.Table中,我希望它将类型为T的实例作为参数。

这是我到目前为止没有编译的内容

public static void InsertAndSubmit<T>(this System.Data.Linq.Table<T> tbl, T element)
{
    tbl.InsertOnSubmit(element);
    tbl.Context.SubmitChanges();
}
  

类型'T'必须是引用类型才能将其用作参数   泛型类型或方法中的“TEntity”   'System.Data.Linq.Table'

2 个答案:

答案 0 :(得分:6)

试试这个:

public static void InsertAndSubmit<T>(this System.Data.Linq.Table<T> tbl, T element)
    where T : class
{
    tbl.InsertOnSubmit(element);
    tbl.Context.SubmitChanges();
}

您需要将T的类型约束为引用类型(class)才能使其生效。

如果您查看Table<TEntity>的{​​{3}},您会在TEntity class注意到相同的类型约束。因此,为了使TTEntity兼容,它必须符合相同的约束条件。

答案 1 :(得分:3)

您需要指定在T中仅使用引用类型。尝试:

public static void InsertAndSubmit<T>(this System.Data.Linq.Table<T> tbl, T element) 
    where T : class
{
    tbl.InsertOnSubmit(element);
    tbl.Context.SubmitChanges();
}