C# 如何在函数中正确返回LINQ查询?
我正在使用LINQ/C并试图从函数返回查询结果。我的东西在下面,不起作用。有什么建议吗?我知道这应该进入我的模型,但一步一步。当我可以让这个工作,我会然后移动到模型 当前,按钮1\u Click中的我的列表框仅返回表名。示例表1.2C# 如何在函数中正确返回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
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,并显示该列,但这可能不是最好的方法。这非常有帮助!谢谢你的提示