如何在 C# 3 分层架构中将输出列表分配给 ListView
How to assign a output list to ListView in c# 3 layered architecture
我正在使用 EF Code First 模块开发一个具有三层架构的应用程序。
- UI层(UI)
- 业务逻辑层 (BLL)
- 数据访问层 (DAL)
我使用 LINQ 从 DAL 中的数据库中检索数据并将其传递给 BLL,然后从 BLL 传递给 UI
例如
在 DAL
public object ReadUsers()
{
var users = db.Users.Select(u => new { u.UserName, u.IsDisable, u.FullName, u.Descriprion }).ToList();
return users;
}
在 BLL
public object ReadUsers()
{
return _userDAL.ReadUsers();
}
和 UI - 将用户列表分配给 ListView
var users = _userBLL.ReadUsers();
users.ToList()
.ForEach(x => lvUserRoleGroup.Items.Add(
new ListViewItem(
new string[] { x.UserName, x.IsDisable.ToString(), x.FullName, x.Descriprion }))
);
但是它抛出一个错误
Error 1 'object' does not contain a definition for 'ToList' and no extension method 'ToList' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
谁能告诉我如何在 ListView
中显示输出?它与 DataGridView
一起工作正常,如下所示 -
var users = _userBLL.ReadUsers();
dataGridView1.DataSource = users;
将对 System.Linq 的引用添加到失败的项目。
当你从你的方法返回 users
时,它 将 转换为 object
。所以当你调用 ToList() 方法时,在 object
的参考不是 method.You 必须 将它投回 到你的对象的 type.And 因为你有匿名类型,你需要创建你的自定义 class 与字段 x.UserName, x.IsDisable.ToString(), x.FullName, x.Descriprion
和到处而不是 匿名类型 使用你的 自定义类型 然后投射到 [=18 的那个对象=]
或者像这样改变objects
这将是您的 class
class CustomClass
{
public string UserName {get ;set ;}
public bool IsDisable {get ;set ;}
public string FullName {get ;set ;}
public string Description {get ;set ;}
}
在 DAL 中
public List<CustomClass> ReadUsers()
{
var users = db.Users.Select(u => new CustomClass{ UserName = u.UserName, IsDisable = u.IsDisable, FullName = u.FullName, Description u.Descriprion }).ToList();
return users;
}
在 BLL
public List<CustomClass> ReadUsers()
{
return _userDAL.ReadUsers();
}
和 UI - 将用户列表分配给 ListView
List<CustomClass> users = _userBLL.ReadUsers();
users.ForEach(x => lvUserRoleGroup.Items.Add(
new ListViewItem(
new string[] { x.UserName, x.IsDisable.ToString(), x.FullName, x.Descriprion }))
);
我正在使用 EF Code First 模块开发一个具有三层架构的应用程序。
- UI层(UI)
- 业务逻辑层 (BLL)
- 数据访问层 (DAL)
我使用 LINQ 从 DAL 中的数据库中检索数据并将其传递给 BLL,然后从 BLL 传递给 UI
例如
在 DAL
public object ReadUsers()
{
var users = db.Users.Select(u => new { u.UserName, u.IsDisable, u.FullName, u.Descriprion }).ToList();
return users;
}
在 BLL
public object ReadUsers()
{
return _userDAL.ReadUsers();
}
和 UI - 将用户列表分配给 ListView
var users = _userBLL.ReadUsers();
users.ToList()
.ForEach(x => lvUserRoleGroup.Items.Add(
new ListViewItem(
new string[] { x.UserName, x.IsDisable.ToString(), x.FullName, x.Descriprion }))
);
但是它抛出一个错误
Error 1 'object' does not contain a definition for 'ToList' and no extension method 'ToList' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
谁能告诉我如何在 ListView
中显示输出?它与 DataGridView
一起工作正常,如下所示 -
var users = _userBLL.ReadUsers();
dataGridView1.DataSource = users;
将对 System.Linq 的引用添加到失败的项目。
当你从你的方法返回 users
时,它 将 转换为 object
。所以当你调用 ToList() 方法时,在 object
的参考不是 method.You 必须 将它投回 到你的对象的 type.And 因为你有匿名类型,你需要创建你的自定义 class 与字段 x.UserName, x.IsDisable.ToString(), x.FullName, x.Descriprion
和到处而不是 匿名类型 使用你的 自定义类型 然后投射到 [=18 的那个对象=]
或者像这样改变objects
这将是您的 class
class CustomClass
{
public string UserName {get ;set ;}
public bool IsDisable {get ;set ;}
public string FullName {get ;set ;}
public string Description {get ;set ;}
}
在 DAL 中
public List<CustomClass> ReadUsers()
{
var users = db.Users.Select(u => new CustomClass{ UserName = u.UserName, IsDisable = u.IsDisable, FullName = u.FullName, Description u.Descriprion }).ToList();
return users;
}
在 BLL
public List<CustomClass> ReadUsers()
{
return _userDAL.ReadUsers();
}
和 UI - 将用户列表分配给 ListView
List<CustomClass> users = _userBLL.ReadUsers();
users.ForEach(x => lvUserRoleGroup.Items.Add(
new ListViewItem(
new string[] { x.UserName, x.IsDisable.ToString(), x.FullName, x.Descriprion }))
);