Метод LINQ 2 SQL для всех таблиц - PullRequest
0 голосов
/ 16 июля 2010

Мое название может быть немного не таким, но вот что я пытаюсь сделать.У меня есть метод L2S, который будет для каждой таблицы, которую я хотел бы написать один раз.Это делается для установки столбца с мягкой блокировкой, где мне также понадобятся методы Read и UnLock.Вот что у меня есть:

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.tblPlans на context.TableName.Возможно ли это в LINQ?Как так?Я предполагаю, что я поступаю неправильно, поэтому я был бы благодарен за некоторые указания / указатели.

1 Ответ

1 голос
/ 16 июля 2010

Обновление, потому что первый пример не будет работать.

Вы можете сделать это с помощью универсального метода и интерфейса:

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 именем класса вашей таблицы.

Однако это не позволит вам устанавливать таблицу во время выполнения, LinqToSQL ориентирован на объект и является безопасным типом, указание таблицы, которую вы хотите получить, противоречит ее работе.

...