如何将SqlDataReader转换为LINQ方式

本文关键字:LINQ 方式 转换 SqlDataReader | 更新日期: 2023-09-27 18:14:27

我想知道如何将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];
         }
.............
............
...........

如何将SqlDataReader转换为LINQ方式

更新以匹配更改的问题:

不选择新的匿名对象,只选择值:

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()产生的错误消息告诉我们period是一个字符串,因此调用可以被删除。

  • int Count = arr.Length

  • for循环已被删除,因为它是冗余的,使用ToArray()函数实现相同的结果

你需要将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];

您需要将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();