0

LINQ/C# を使用しており、クエリの結果を関数から返そうとしています。私が持っているものは以下で、動作しません。助言がありますか?これが私のモデルに入る必要があることはわかっていますが、一度に 1 ステップずつです。これを機能させることができたら、モデルに移ります。

現在、button1_Click のリストボックスはテーブル名のみを返しています。例 Table1.Table2.

        public IQueryable runDBQuery()
        {

            Variables obj = new Variables();
            var urlList = from SURL in db.SteamURLs
                          where obj.UserID == SURL.uID
                          select SURL;

            dataGridView1.DataSource = urlList;

            return urlList;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var urlList = runDBQuery();

            // This doesn't work?
            listBox1.DataSource = urlList;
        }

答え:

public IList<SteamURL> runDBQuery()
        {

            Variables obj = new Variables();
            var query = from SURL in db.SteamURLs
                          where obj.UserID == SURL.uID
                          select SURL;

            var urlList = query.ToList();
            dataGridView1.DataSource = urlList;

            urlList.ToList();

            return urlList;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var urlList = runDBQuery();

            // This doesn't work?
            listBox1.DataSource = urlList;
            listBox1.DisplayMember = "itemURL";

        }
4

1 に答える 1

1

エンティティによって表されるフィールドのセット全体にデータバインドされるように ListBox に指示しようとしていSteamURLますが、Listbox (表示できる列は 1 つしかありません) には、どのフィールドを表示するかがわからないため、表示されているだけです。 「オブジェクトがリスト内のこのエントリにバインドされている」ことを表すデフォルトの文字列。

DisplayMemberプロパティが何であるかを ListBox に伝える必要があります。

SteamURLたとえば、呼び出されたURL(推測だけ)にプロパティがある場合、この行の前に

listBox1.DataSource = urlList;

これを置く:

listBox1.DisplayMember="URL";

そしてそれはうまくいくはずです。ちなみに、上記のすべての推奨事項の 2 番目に、この場合は IQueryable を返したりバインドしたりしないでください。最初に ToList() などを使用して urlList を変換する必要があります。

var query= from SURL in db.SteamURLs
                         where obj.UserID == SURL.uID
                         select SURL;
//this "materialises" the query and fetches the results back from the database. 
        var urlList= query.ToList(); 
//This means that you won't inadvertently trigger another database access by referring to urlList later on.
       dataGridView1.DataSource = urlList;
       return urlList;
于 2013-09-24T00:17:49.293 に答える