1

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];
         }
.............
............
...........
4

3 に答える 3

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() 関数を使用しても同じ結果が得られます。

于 2013-05-20T09:45:27.507 に答える
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];
于 2013-05-20T09:37:25.270 に答える