2010-07-16 31 views
0

我的标题可能会稍微偏离,但这是我想要做的。我有一个L2S方法,可以用于每个我想写一次的表。这是设置一个软锁列,我还需要一个ReadUnLock方法。以下是我迄今为止:LINQ 2所有表的SQL方法

public static void LockRow(string TableName, int TablePrimaryKey) 
    { 
     using (var context = McpDataContext.Create()) 
     { 
      var tableToLock = (from lockTable in context.tblPlans 
           where lockTable.PlanID == TablePrimaryKey 
           select lockTable).Single(); 

      tableToLock.Locked = true; 
      context.SubmitChanges(); 
     } 
    } 

我想这样做是context.TableName取代context.tblPlans。这在LINQ中可能吗?怎么会这样?我假设我正在以错误的方式进行,所以我会感谢一些方向/指针。

谢谢

回答

1

更新因为第一个例子不起作用。

你可以用普通的方法和接口做到这一点:

public interface IPlanTable 
{ 
    int PlanID { get; set; } 
} 

public static void LockRow<TEntity>(int TablePrimaryKey) where TEntity : class, IPlanTable 
{ 
    using (var context = McpDataContext.Create()) 
    { 
     var tableToLock = (from lockTable in context.GetTable<TEntity>() 
          where lockTable.PlanID == TablePrimaryKey 
          select lockTable).Single(); 

     tableToLock.Locked = true; 
     context.SubmitChanges(); 
    } 
} 

你也将不得不使用的事实Linw2SQL表为部分类为扩展他们,让所有的培训相关表来实施IPlanTable

你会使用它象下面这样:

LockRow<tblPlan>(23); 

只需用标签的任何名称替换tblPlan le class是。

但是,这不会允许您在运行时设置表,LinqToSQL是面向对象和类型安全的,指定要检索的表与您设计的工作方式相反。

+0

但是,它可以让我在设计时将它用于多个表格,对吗? – 2010-07-16 16:23:23

+0

愚蠢的问题,但什么是我为'TEntity'提供的例子? – 2010-07-16 16:25:53

+0

嗯,想到它,你可能需要设计一个接口并将其应用到所有的表,hanf我会更新答案 – 2010-07-16 16:26:06