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

本文关键字:返回 LINQ 查询 函数 | 更新日期: 2023-09-27 18:32:26

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

目前,button1_Click中的列表框仅返回表名。示例表1.表2。

        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";
        }

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

您尝试告诉 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;