как получить доступ к столбцам по индексу в LINQ - PullRequest
0 голосов
/ 02 марта 2010

В моем классе Linq to sql есть такая таблица:

ID   CL1    CL2    CL3 ...  CL20
--  ----   ----   -----    ------
1     12     35     54 ....  44
2     11     35     78 ..... 75

данные не важны в этом примере.
Мне нужно получить доступ к каждому столбцу с их индексом.

например, чтобы получить доступ к данным в CL3 следующим образом:

var x = db.myTable.single(a=>a.ID==1)[3]; 

Может кто-нибудь помочь мне, пожалуйста?

Ответы [ 2 ]

1 голос
/ 02 марта 2010

Свойства в объекте не обязательно находятся в том же порядке, что и столбцы в базе данных.

Вы можете сделать отражение, чтобы выбрать свойство по индексу, но это не имеет смысла. Вместо этого вы должны использовать имена столбцов.

Исходя из вашего комментария, вы можете сделать то, что столбцы имеют имя, заканчивающееся цифрой.

int columnIndex = 3;
var property = (from p in db.myTable.GetType().GetProperties()
                where p.Name.EndsWith(columnIndex.ToString())
                select p).First();
var record = db.myTable.single(a=>a.ID==1);
var x = property.GetValue(record, null)
0 голосов
/ 02 марта 2010

Вы можете преобразовать свой результат в таблицу данных, подобную этой

public static DataTable ConvertToDataTable<T>(IList<T> list)
{
    var dt = new DataTable();
    var properties = typeof(T).GetProperties();

    foreach (var pi in properties)
        dt.Columns.Add(pi.Name, pi.PropertyType);

    foreach (T element in list) {
        var row = dt.NewRow();
        foreach (var pi in properties)
            row[pi.Name] = pi.GetValue(element, null);
        dt.Rows.Add(row);
    }
    return dt;
}

и затем вы можете получить доступ к столбцам по имени или по индексу.

var dt = ConvertToDataTable<test>(list);
var CL5 = dt.Rows[0][5];
var CL5_by_name = dt.Rows[1]["CL5"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...