2013-05-20 2 views
1

Интересно, как конвертировать SqlDataReader в LINQ?Как преобразовать SqlDataReader в метод LINQ?

Вот мой код SqlDataReader.

string strConn = "server=xxx.com;database=mydb;User ID=test;Password=test;Trusted_Connection=true;"; 
SqlConnection myConn = new SqlConnection(strConn); 
myConn.Open(); 

string strSQL = "select period from timetable_view where identity_num = '" + Identity_NUM + "' week = '3'"; 
SqlCommand myCommand = new SqlCommand(strSQL, myConn); 
SqlDataReader myDataReader = myCommand.ExecuteReader(); 

int Count = Add_CourseConfirmedQuery.Count(); 

Random rnum = new Random(); 
string[] arr = new string[Count]; 
for (int i = 0; i < Count; i++) 
{ 
    myDataReader.Read(); 
    arr[i] = myDataReader["period"].ToString(); 
} 
ViewBag.test = arr[0]; 
ViewBag.test2 = arr[1]; 

myCommand.Cancel(); 
myDataReader.Close(); 
myConn.Close(); 
myConn.Dispose(); 

string[] input2 = new string[Count]; 

for (int i = 0; i < Count; i++) 
{ 
    input2[i] = arr[i]; 
} 

Этот код работает нормально.

Я пробовал код в LINQ, но он не работает.

Вот код LINQ, который я пробовал, но я понятия не имею, как извлечь все записи a.identity_num и поместить их в массив, такой как код выше (SqlDataReader).

var test = from a in timetable_view 
      where a.identity_num = Identity_NUM && a.week = "3" 
      select a new{a.identity_num}; 

ViewBag.test = test.FirstOrDefault(); 

[UPDATE Вопрос]

Это то, что я пытаюсь в настоящее время.

Я не могу извлечь нужные записи из своего стола.

Но отображаемая страница: System.String []

var Query = from m in db.members 
      join d in db.departments on m.department equals d.department_id 
      join s in db.select_list on m.member_id equals s.member_id 
      join c in db.courses on s.kkk_id equals c.kkk_id 
      join t in db.teachers on c.teacher equals t.teacher_id 
      where m.identity_num == Identity_NUM && c.week == "3" 
      select c.period; 
      var PA = Query.ToArray(); 
      int Count = Query.Count(); 


string[] arr = new string[Count]; 
      for (int i = 0; i < Count; i++) 
      { 
       arr[i] = PA.ToString(); 
      } 
      ViewBag.test = arr[0]; 
      ViewBag.test2 = arr[1]; 
............. 
............ 
........... 

string[] input2 = new string[Count]; 
     for (int i = 0; i < Count; i++) 
     { 
      input2[i] = arr[i]; 
     } 
............. 
............ 
........... 
+0

Для чего вам нужен этот тип annonymus? Если вам это не нужно, измените новый {c.period} на c.period – CSharpie

+0

@CSharpie Но отображение страницы: System.String [] – user2401077

+0

Нет, но System.String [] не является аннонимным типом , или это? – CSharpie

ответ

3

Обновлен в соответствии измененный вопрос:

Не выбрать новый анонимный объект, просто выберите значение:

var arr= (from a in timetable_view 
      where a.identity_num = Identity_NUM && a.week = "3" 
      select a.period).ToArray(); 

Полностью обновленное изменение должно быть

var Query = from m in db.members 
      join d in db.departments on m.department equals d.department_id 
      join s in db.select_list on m.member_id equals s.member_id 
      join c in db.courses on s.kkk_id equals c.kkk_id 
      join t in db.teachers on c.teacher equals t.teacher_id 
      where m.identity_num == Identity_NUM && c.week == "3" 
      select c.period; 


var arr = Query.ToArray();  

ViewBag.test = arr[0]; 
ViewBag.test2 = arr[1]; 

Из комментариев:

  • сообщение Ошибка генерируется при наличии ToString() в коде указывает нам, что период является строкой, так или иначе, и поэтому вызов может быть удален.

  • Чтобы получить отсчет, int Count = arr.Length

  • для-петли была удалена, поскольку он является излишним, используя функцию ToArray() достигает того же результата.

+0

Я обновил свой вопрос. Но отображение страницы: <> f__AnonymousType15'1 [System.String] [] – user2401077

+0

Изменен ответ. –

+0

нет работа. result: System.String [] – user2401077

0

Вы должны преобразовать Linq запрос в массив. Пыльник код должен это сделать:

var test = (from a in school_timetable_view 
      where a.identity_num == Identity_NUM && a.week == "3" 
      select a new{a.identity_num}).ToArray(); 
+0

Это создает анонимный тип, а именно выбор значения, как это делает код читателя. Также код считывателя занимает период захвата не identity_num –

+0

Я обновил свой вопрос. Но отображение страницы: <> f__AnonymousType15'1 [System.String] [] – user2401077

+0

Те '=' должны быть '==', также. –

0

вы должны необходимо преобразовать linkq в ToArray:

var TEST = (from a in timetable_view 
      where a.identity_num = Identity_NUM && a.week = "3" 
      select a new{a.identity_num}).ToArray(); 

var Query = from m in db.members 
      join d in db.departments on m.department equals d.department_id 
      join s in db.select_list on m.member_id equals s.member_id 
      join c in db.courses on s.kkk_id equals c.kkk_id 
      join t in db.teachers on c.teacher equals t.teacher_id 
      where m.identity_num == Identity_NUM && c.week == "3" 
      select c.period.ToString(); 


var arr = Query.ToArray();  

ViewBag.test = arr[0]; 
ViewBag.test2 = arr[1]; 
+0

Я обновил свой вопрос. Но отображение страницы: <> f__AnonymousType15'1 [System.String] [] – user2401077

+0

вы не упомянули в своем вопросе bro ... –

+0

Почему вы удаляете цикл for? А также мне еще нужно int Count = Query.Count(); – user2401077

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