我正在使用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";
}
答案 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;