2

私はEntity Frameworkを使用しており、人々のセットを調べるループを持っています.foreachループを使用すると、各人の住所のクエリが作成されます。各アドレス クエリが作成されると、ツリービューのノードに追加され、後で使用できます (子ノードにデータを入力するため)。

 IQueryable<Person> pQuery = (IQueryable<Person>)myContext.People; //get a list of people

 //go through and get the set of addresses for each person
 foreach (var p in pQuery)
 {
      var addressQuery = from a in myContext.Addresses
                                   from al in a.Address_Links
                                   where al.P_ID == p.P_ID
                                   orderby a.A_POST_CODE
                                   select a;


     //add the query to a TreeView node (use the tag to store it)
     TreeNode newNode = new TreeNode();
     newNode.Tag = addressQuery;
 }

さて、アプリの実行時に私が見つけた問題は、すべてのクエリが作成された最後のクエリ、つまりループの最後の反復であることです。これは、ループの最初の繰り返しで addressQuery が作成され、その後の各クエリで上書きされるようなものです。この結果、ツリー ノード内のすべてのアドレス クエリが、最後に作成されたクエリへの参照であるようなものになります (?)。

次のように、静的クラスを使用してアドレスクエリを生成し、それを各 TreeNode に渡すことで問題を解決できることをさらに調査します。

 public static class Queries
    {
        public static IQueryable<Address> AddressesForPerson(GenesisEntities myContext, int key)
        {
            var query = from a in myContext.Addresses
                        from al in a.Address_Links
                        where al.P_ID == key
                        orderby a.A_POST_CODE
                        select a;
            return query;
        }

}

私が持っている質問は、私がこの行動に困惑していることです. 静的クエリ クラスが役立つのはなぜですか? 誰が私に何が起こっているのか説明できますか?

混乱ドットコム!

4

1 に答える 1