Сохранять результаты набора данных в IList - PullRequest
0 голосов
/ 27 марта 2012

Как мне сохранить результаты из набора данных в Ilist?

Model read = new Model()
IList<sqlprop> sqlprop= read.readrows("SELECT * FROM test").Tables[0].Cast<DataRow>().ToList();

Class Model
{
public DataSet readrows(string query)
        {
            ............
            return dataset;
        }
}

Class sqlprop
{
string data1 get;set;
string data2 get;set;
.........
}

1 Ответ

5 голосов
/ 27 марта 2012

Что-то вроде этого будет делать то, что вы хотите, я думаю ...

List<sqlprop> sqlprop= read
    .readrows("SELECT * FROM test")
    .Tables[0]
    .Rows
    .Cast<DataRow>()
    .Select(r => new sqlprop
                     {
                         data1 = r.GetString(0),
                         data2 = r.GetString(1)
                     })
    .ToList();

Вы должны проверить DBNull.Value и, возможно, включить имя столбца в запрос SQL и т. Д., И т. Д., Но вы поняли идею.

Обновление

Если вам нужно, чтобы оно было универсальным, а имя столбца в базе данных точно совпадало с именем свойства, вы могли бы сделать что-то вроде этого (не проверено, у меня нет компилятора здесь, но он должен дать вам идею):

List<sqlprop> sqlprop= read
    .readrows("SELECT * FROM test")
    .Tables[0]
    .Rows
    .Cast<DataRow>()
    .Select(r => {
        var ret = new sqlprop();
        foreach (var p in ret.GetType().GetProperties())
        {
            object val = r[r.Table.Columns.IndexOf(p.Name)];
            if (val != DBNull.Value)
            {
                p.SetValue(ret, val, null);
            }
        }
        return ret;
     })
    .ToList();

ПРИМЕЧАНИЕ: это немного ненадежно и не супер эффективно, но в любом случае, вот оно!

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