如何在函数中正确返回LINQ查询?

时间:2013-09-23 23:29:26

标签: c# linq iqueryable

我正在使用LINQ / C#并尝试从函数返回查询结果。我所拥有的是下面的,不起作用。有什么建议?我知道这应该进入我的模型,但一步一步。当我能够开始工作时,我将转向模型。

目前,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";

        }

1 个答案:

答案 0 :(得分:1)

您试图将ListBox数据绑定到SteamURL实体所代表的整个字段集,但是列表框(它只有一列可以显示 )不知道要显示哪个字段,所以它只显示一个默认字符串来表示“一个对象绑定到列表中的此条目”。

你需要告诉ListBox DisplayMember属性是什么。

例如,如果SteamURL上有一个名为URL的属性(只是猜测),那么在此行之前

listBox1.DataSource = urlList;

把这个:

listBox1.DisplayMember="URL";

它应该有效。顺便提一下上面的所有建议,在这种情况下不要返回或绑定到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;