2013-05-20 31 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(); 

[更新問題]

這就是我現在想。

我無法從我的表中提取正確的記錄。

但頁面顯示: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

  • for循環已被刪除,因爲它是多餘的,使用ToArray的()函數達到相同的結果。

+0

我已更新我的問題。但頁面顯示:<> f__AnonymousType15'1 [System.String] [] – user2401077

+0

已更改答案。 –

+0

不起作用。結果: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轉換爲指定者:

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

你沒有提到你的問題... –

+0

爲什麼你刪除for循環?而且我還需要int Count = Query.Count(); – user2401077