Выбор (количество) столбцов с использованием linq to sql - PullRequest
0 голосов
/ 30 июня 2011

У меня есть такая таблица

    Student   Exam    p1   p2   p3   p4   p5   p6   p7   p8   p9   p10   p11   p12
-----------------------------------------------------------------------------------
    100       unit1   89   56   59   28   48   38   0    0    0     0     0     0
    100       unit2   89   56   59   0     0    0   0    0    0     0     0     0
    100       unit3   89   56   59   28   48   38   0    0    0     0     0     0
    100       unit4   89   56   59   28   48   0    0    0    0     0     0     0

другой стол

    Exam   Num_subjects
    ----------------------
    unit1     6
    unit2     3
    unit3     6
    unit4     5

теперь мне нужно выбрать только первые 8 столбцов в таблице меток для unit1, так как номер субъекта для unit1 равен 6 .. как это сделать динамически ... экзамен является внешним ключом к таблице оценок в linq to sql любые идеи ...

Ответы [ 3 ]

1 голос
/ 30 июня 2011

Если у вас есть дизайн на основе столбцов, поскольку L2S не позволяет вам материализоваться вручную (т. Е. new MyTable { Foo = row.Foo /* omit some }, вы немного растеряны.

Если вы просто хотите получить данные, вы можете использовать что-то вроде "dapper", у которого не будет этой проблемы, но вам нужно будет написать TSQL самостоятельно, т.е.

var rows = conn.Query<MyTable>("select p1, p2, p3, p4, p5 from MyTable where Exam=@exam",
        new { exam }).ToList();

Но, в конечном счете, я бы предпочел другую схему БД здесь ...

0 голосов
/ 30 июня 2011

Здесь вам не нужно использовать linq, вы можете сделать это с помощью логики

Теперь просто получите Num_Subjects, как для unit1 = 6

DataTable dt = [whole_table];

int counter = Num_Subjects + 1; //7

string colName = "P" + counter.ToString(); //P7

while(dt.Columns.Contains(colName))
{
   dt.Columns.Remove(colName);
   colName = "P" + (++counter).ToString()
}

Наконец вы получили таблицудо P6 столбцов остальные столбцы будут удалены.

0 голосов
/ 30 июня 2011

не было бы необходимости в динамическом запросе, если бы эти таблицы были нормализованы. (проверьте свой дизайн)

если вы действительно хотите сделать это динамически, вам понадобится дерево выражений, которое обрабатывает выбранную часть вашего запроса ... здесь вы можете найти более подробную информацию о динамическая библиотека запросов, которая может обработать генерацию этого дерева выражений для вас (вы можете предоставить строку типа «new (p1, p2, p3)» и которая будет преобразована в дерево выражений)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...