2014-01-03 1 views
3

У меня есть запрос с объединением так:Преобразовать в список из DataReader в .net

string cmdString = "select tblPackages.*, tblPackageTypes.Name from tblPackages join tblPackageTypes on tblPackages.TypeId = tblPackageTypes.Id"; 

Теперь я использую эту команду SQL и получить обратно DataReader так:

SqlCommand cmd = new SqlCommand(cmdString,con); 
SqlDataReader dr; 

I хотите заполнить значения чтения данных в списке. Я упомянул об этом link, но я не получил то, что мне было нужно.

Я следующий вывод столбцов из SQL

Id, TypeId, AllowedSMS, TimeSpan, Price, TypeName. 

Я просто хочу, чтобы передать их в списке. Пожалуйста, помогите мне .. и я новичок в asp.net

+1

«но я не получил, что мне нужно» => Что есть вы пытались и что вы на самом деле получили? – Koen

+0

@Koen список int, но мне нужен список всех столбцов – Robz

+1

Тогда вам нужно будет создать класс для хранения значений столбцов, в которых вы нуждаетесь. – Koen

ответ

9

Ну, в вашем случае, вам нужно класс, который может содержать столбцы:

public class MyClass 
{ 
    public int Id { get; set; } 
    public int TypeId { get; set; } 
    public bool AllowedSMS { get; set; } 
    public string TimeSpan { get; set; } 
    public decimal Price { get; set; } 
    public string TypeName { get; set; } 
} 

Конечно, так как вы не сделали определите тип данных этих столбцов, это всего лишь догадка - вам, возможно, потребуется адаптироваться к вашим конкретным потребностям.

А теперь вам нужно перебрать SqlDataReader и извлечения значений из чтения данных и заполнить вновь созданный класс:

using (SqlDataReader dr = cmd.ExecuteReader()) 
{ 
    List<MyClass> results = new List<MyClass>(); 

    while(dr.Read()) 
    { 
     MyClass newItem = new MyClass(); 

     newItem.Id = dr.GetInt32(0); 
     newItem.TypeId = dr.GetInt32(1); 
     newItem.AllowedSMS = dr.GetBoolean(2); 
     newItem.TimeSpan = dr.GetString(3); 
     newItem.Price = dr.GetDecimal(4); 
     newItem.TypeName = dr.GetString(5); 

     results.Add(newItem); 
    } 
} 

// return the results here, or bind them to a gridview or something.... 
+1

Вы можете использовать Object Initializer, чтобы украсить это - newItem;) – usefulBee

+0

Есть ли способ (возможно, с Linq?), Чтобы выбрать или передать 'SqlDataReader dr' как' List ' вместо того, чтобы перебирать каждую запись с помощью 'dr.Read()' ? Подобно Lambda '.Select (a => новый MyClass() {Id = a.Id, TypeId = a.TypeId})' и т. Д.? – jbwebtech

Смежные вопросы