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

C# 如何在函数中正确返回LINQ查询?,c#,linq,iqueryable,C#,Linq,Iqueryable,我正在使用LINQ/C并试图从函数返回查询结果。我的东西在下面,不起作用。有什么建议吗?我知道这应该进入我的模型,但一步一步。当我可以让这个工作,我会然后移动到模型 当前,按钮1\u Click中的我的列表框仅返回表名。示例表1.2 public IQueryable runDBQuery() { Variables obj = new Variables(); var urlList = from SURL in

我正在使用LINQ/C并试图从函数返回查询结果。我的东西在下面,不起作用。有什么建议吗?我知道这应该进入我的模型,但一步一步。当我可以让这个工作,我会然后移动到模型

当前,按钮1\u 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";

        }

您试图告诉ListBox将数据绑定到由SteamURL实体表示的整个字段集,但是只有一列可以显示的ListBox不知道要显示哪一个字段,因此它只是显示一个表示对象的默认字符串,该字符串绑定到列表中的该项

您需要告诉列表框DisplayMember属性是什么

e、 g如果在一个名为URL just guessing的streamURL上有一个属性,那么在这一行之前

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;

不起作用。为什么不呢?而且1.延期付款。。您真的应该返回IList/IEnumerable并调用查询上的.ToList。当我尝试将其放入列表框时,它不起作用。列表框只提供了表的字符串。SteamFetch.SteamURL…..我编辑了上面的内容,这是什么意思?表名?您正在选择整个实体StreamURL,而不是其中一列。你确定这就是你想要做的吗?而不是选择SURL.YourColumn?我知道当我选择dataGridView1.DataSource=urlList时。我的datagrid已正确填充。当我在另一个函数中执行listbox1.Datasource=urlList时,它不起作用。你能解释一下为什么上面的方法不起作用吗?我可能会理解得更好一些。@allencoded,是的,因为网格是用来显示表格数据的,所以实体的每个列属性都显示在网格中。列表用于显示普通数据—数据源中每个项目一行。鉴于此,当您没有给出列表要显示的列的指示时,列表到底应该显示什么?另外,您可以覆盖实体的.ToString,并显示该列,但这可能不是最好的方法。这非常有帮助!谢谢你的提示