0

したがって、私は一般的にLINQとデータベースにあまり強くないので、私が初心者であることを理解してください。従業員の活動に関する情報をシステムから取得しようとしています。ここに問題があります。テーブルを返す 4 つの mysql クエリがあります。私はそのように情報を取得します

private DataTable GetBreaks()
    {
        server = "someip";
        database = "calls";
        uid = "user";
        password = "password";
        int port = 999999;
        string connectionString;
        connectionString = "server=" + server + ";" + "database=" + database + ";" + "port=3306;" + "user=" + uid + ";" + "password=" + password + ";";

        connection = new MySqlConnection(connectionString);

        if (this.OpenConnection() == true)
        {
            DataSet dt = new DataSet();
            DateTime endDateRun = radDateTimePicker2.Value.Date;
            DateTime endDate;
            DateTime startDate = radDateTimePicker1.Value.Date;
            if (endDateRun != startDate)
            {

                do
                {
                    endDate = startDate.AddDays(1);
                    string start = startDate.ToString("yyyy-MM-dd HH:mm:ss");
                    string end = endDate.ToString("yyyy-MM-dd HH:mm:ss");
                    string standard = "SELECT number, agent, break, (SUM(TIME_TO_SEC(duration))) AS Total FROM agentBreaks WHERE (datetime_init > '+ start +' and datetime_init < '+ end+' ) and (break= '15 Minute') GROUP BY break,agent

" + "join break on (audit.id_break = break.id) where (datetime_init >'" + start + "' and datetime_init < '" + end + "' ) and (break.name = '15 Minute') GROUP BY break.name,agent"; mySqlDataAdapter = new MySqlDataAdapter(標準、接続); DataSet DS = new DataSet(); mySqlDataAdapter.Fill(DS);

                    DS.Tables[0].Columns.Add(new DataColumn("date"));
                    for (int i = 0; i <= DS.Tables[0].Rows.Count - 1; i++)
                    {
                        DS.Tables[0].Rows[i]["date"] = startDate.ToString();
                    }
                    dt.Merge(DS);
                    startDate = startDate.AddDays(1);
                } while (endDateRun != endDate);

            }
            //close connection
            this.CloseConnection();
            return dt.Tables[0];
        }
        return null;
    }

次に、他の結果を取得し、Linq を使用してそれらを結合しようとします。

 protected void CreateUnifiedTable()
    {
        DataTable Merged;
        DataTable dt1 = GetClockin();
        DataTable dt2 = GetLunch();
        DataTable dt3 = GetBreaks();
        DataTable dt4 = GetOther();
        var myLINQ = from DataTable t1 in dt1.AsEnumerable()
                     join t2 in dt2.AsEnumerable() on new { t1.id_agent, t1.date } equals new { t2.id_agent, t2.Columnsdate }
                     join t3 in dt3.AsEnumerable() on new { t1.id_agent, t1.date } equals new { t3.id_agent, t3.Columnsdate }
                     join t4 in dt4.AsEnumerable() on new { t1.id_agent, t1.date } equals new { t4.id_agent, t4.Columnsdate }


                     select new
                     {
                         name = t1.Field<string>("agent"),
                         login = t1.Field<DateTime>("Login"),
                         fifteenMinute = t3.Field<TimeSpan>("Total"),
                         lunch = t2.Field<TimeSpan>("Total"),
                         other = t4.Field<TimeSpan>("Total"),
                         logout = t1.Field<TimeSpan>("Logout"),
                         total = t1.Field<TimeSpan>("Total") - t2.Field<TimeSpan> "Total")
                     };
    }

しかし、私が得るのはこのエラーだけです ソースタイプ 'System.Data.EnumerableRowCollection'のクエリパターンの実装が見つかりませんでした。「参加」が見つかりません。「System.Linq」のリファレンスまたは using ディレクティブがありませんか?

編集:

匿名データ型のため、myLinq を DataTable として適切にバインドできません。何が間違っているのでしょうか?

4

1 に答える 1

1

System.Core への参照と、System.Linq および System.Data.Linq の using ディレクティブを追加してみてください。

于 2013-08-02T16:16:43.957 に答える