如何在 C# 3 分层架构中将输出列表分配给 ListView

How to assign a output list to ListView in c# 3 layered architecture

我正在使用 EF Code First 模块开发一个具有三层架构的应用程序。

  1. UI层(UI)
  2. 业务逻辑层 (BLL)
  3. 数据访问层 (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 }))
                );