2013-05-20 30 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