Linq将表作为Table <t> </t>的对象传递

时间:2014-02-14 14:59:36

标签: c# linq

我有以下方法

static DataContext dc;

public static Int32 GetTotalRecordsForTable1()
{
    DataContext dc = new DataContext ();
    return dc.GetTable<Table1>().Count();
}

public static Int32 GetTotalRecordsForTable2()
{
    DataContext dc = new DataContext ();
    return dc.GetTable<Table2>().Count();
}

和儿子。

我希望有一个接受表作为参数的方法:

public static Int32 GetTotalRecordsForTable1(Table<t> myTable)
{
    DataContext dc = new DataContext ();
    return dc.GetTable<myTable>().Count();
}

我该怎么办?

3 个答案:

答案 0 :(得分:3)

您应该制作method generic

public static Int32 GetTotalRecordsForTable<T>(Table<T> myTable)
   where T : class
{
    DataContext dc = new DataContext ();
    return dc.GetTable<T>().Count();
}

在上面的示例中,您实际上并未使用myTable。如果您不需要它,可以将其删除:

public static Int32 GetTotalRecordsForTable<T>()
   where T : class
{
    DataContext dc = new DataContext ();
    return dc.GetTable<T>().Count();
}

// call these methods like:
GetTotalRecordsForTable(myTable); // T as Table1 is inferred
GetTotalRecordsForTable<Table1>(); // T as Table1 is explicitly specified

答案 1 :(得分:2)

我想你想要这个?

public static Int32 GetTotalRecordsForTable1<T>()
{
  DataContext dc = new DataContext ();
  return dc.GetTable<T>().Count();
}

您甚至不需要参数,因为看起来您只想传递泛型类型来检索数据。您可以添加type constraint来限制T的内容,也可以

答案 2 :(得分:0)

使用泛型,就像GetTable方法本身一样:

public static Int32 GetTotalRecordsForTable<TTable>()
{
    DataContext dc = new DataContext ();
    return dc.GetTable<TTable>().Count();
}

如果你的所有表都实现了一个接口,你可以添加一个通用约束来限制泛型参数:

public static Int32 GetTotalRecordsForTable<TTable>()
    where TTable : ITable

然后打电话就像你打电话给GetTable

var count = GetTotalRecordsForTable<Table1>();