如何在函数中正确返回 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";
}
您尝试告诉 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;