C# 如何将数据源绑定到DataGridView或ListView

C# 如何将数据源绑定到DataGridView或ListView,c#,winforms,entity-framework,datagridview,C#,Winforms,Entity Framework,Datagridview,我首先使用实体框架6.1代码的三层体系结构 UI层中的代码 dataGridView1.DataSource = _userBLL.GetUsers(); 业务逻辑层中的代码 public object GetUsers() { return _userDAL.GetUsers(); } 数据访问层中的代码 public object GetUsers() { return db.Users.Select(u => u); } 我可以检索数据,但在将数据源分配给Dat

我首先使用实体框架6.1代码的三层体系结构

UI层中的代码

dataGridView1.DataSource = _userBLL.GetUsers();
业务逻辑层中的代码

public object GetUsers()
{
    return _userDAL.GetUsers();
}
数据访问层中的代码

public object GetUsers()
{
    return db.Users.Select(u => u);
}
我可以检索数据,但在将
数据源
分配给
DataGridView
时抛出以下错误:

不支持直接将数据绑定到存储查询(DbSet、DbQuery、DbSqlQuery、DbRawSqlQuery)。而是用数据填充数据库集,例如通过在数据库集上调用Load,然后绑定到本地数据。对于WPF,绑定到DbSet.Local。对于WinForms,绑定到DbSet.Local.ToBindingList()。对于ASP.NET WebForms,您可以绑定到对查询调用ToList()的结果,或使用模型绑定,有关详细信息,请参阅

有人能帮我解决这个错误吗?如何将检索到的数据源分配给
DataGridView
以及
ListView

调用
ToList()
方法。像这样:

public object GetUsers()
{
   return db.Users.ToList();
}
您还可以像这样使用
AsQueryable()
:(返回
IQueryable
将推迟查询的执行,直到其结果被实际使用为止。)

public IQueryable GetUsers()
{
返回db.Users.AsQueryable();
}

阅读这篇文章可能很有用:

你需要这样做

public IEnumerable<User> GetUsers()
{
    return db.Users.Select(u => u).ToList();
}
public IEnumerable GetUsers()
{
返回db.Users.Select(u=>u.ToList();
}

应用ToList并更改代码中的返回类型…您的代码有问题,因为您直接将查询提交到datagrid…此问题的原因是linq查询被灵活执行。。这意味着您需要使用ToList、Count等获取查询结果。

谢谢。。ToList()适用于我。。。您还可以让我知道,如何将此数据源分配给
ListView
?您实际上无法绑定到ListView控件,因为它不支持绑定。谢谢您的评论。。。在这种情况下,我们如何在
ListView
控件中显示检索到的数据?
public IEnumerable<User> GetUsers()
{
    return db.Users.Select(u => u).ToList();
}