1

私はこのコードを以下に持っています。データを取得し、データプロパティを収集した値に設定します。

public struct TrblShootData
    {
       public List<string> Logins;
       public IEnumerable<Hieracrhy> Hierarchy;
       public IEnumerable<EmployeeTeam> EmpTeam; 
    }

  public TrblShootData TroubleShootData
   {
       get;
       private set;
   }

 class DataGetter
 { 
 public void GetData(string FirstName, string LastName, string Login, string Email, bool isFirstName, bool isLastName, bool isLogin, bool isEmail)
    {         
        List<string> logins = null;
        IEnumerable<Hieracrhy> hier = null;
        IEnumerable<EmployeeTeam> tmemp = null;

        TrblShootData tsData = new TrblShootData();

        queries q = BuildQuery(FirstName, LastName, Login, Email, isFirstName, isLastName, isLogin, isEmail);

        if (q.isValidQueries)
        {
            DataContext1 mscDB = new DataContext1 ();

            using (DataContext2 opsDB = new DataContext2 ())
            {                    
                tmemp = opsDB.ExecuteQuery<EmployeeTeam>(q.qryEmployeeTeam);

            }

            using (DataContext3 rptDB = new DataContext3 ())
            {                    
                hier = rptDB.ExecuteQuery<Hieracrhy>(q.qryHierarchy);

                if (hier != null)
                {
                    logins = hier.Select(s => s.SalesRepLogin).Distinct().ToList();
                }

            }

            tsData.EmpTeam = tmemp.Select(r=>r);
            tsData.Hierarchy = hier.Select(r => r);
            tsData.Logins = logins.Select(r => r).ToList();

            TroubleShootData = tsData;

        }//if                  
    }
  }

別のクラスから私はこれをしようとします:

 tshtr.GetData(txtFirstName.Text, txtLastName.Text, txtLogin.Text, txtEmail.Text, chkFirstName.Checked, chkLastName.Checked, chkLogin.Checked, chkEmail.Checked);

        gvEmpTeams.DataSource = tshtr.TroubleShootData.EmpTeam;
        gvHierarchy.DataSource = tshtr.TroubleShootData.Hierarchy;

        gvEmpTeams.DataBind();
        gvHierarchy.DataBind();

しかし、DataBind()で、閉じたリーダーから読み取ることができないというエラーが表示されます。

使用法で値を割り当てた後、上記のようにプロパティを設定したときに、なぜこのエラーがスローされるのかわかりません。ですから、これがクローズドリーダーをどのように使用しようとしているのかわかりません。

助けてくれてありがとう!

4

1 に答える 1

1

実行が延期されるため、DataContextを閉じた後、データバインディングエンジンが結果を列挙したときにのみクエリが実行されます。

.ToList()DataContextを閉じる前に呼び出す必要があります。これにより、DataContextがすぐに評価されます。

于 2012-12-19T01:19:22.983 に答える