【问题标题】:How to correctly obtain a list of element of a table related to another table by a relation?如何通过关系正确获取与另一个表相关的表的元素列表?
【发布时间】:2014-03-28 11:05:52
【问题描述】:

我对数据库的使用还很陌生,遇到以下问题。

我有这 3 个表:Server(代表服务器)、Cpe(每行代表特定产品)和 Server_Cpe(与服务器的行和 Cpe 的行相关)

所以我认为这意味着:在 Server 的单行可能与 Cpe 中的 1 行或多行相关,并且在 Cpe 的单行strong>Cpe 可能与 Server 中的 1 行或多行相关。

对吗?

所以我有这 3 个表:

现在在我的应用程序中,我有以下类映射上一个表:ServerCpe

Server 类包含以下属性:

public virtual List<CPE.CPE> cpeList { get; set; }

表示与特定服务器实例相关的CPE列表(取自Cpe表)

现在,在管理器类中,我必须实现一个填充 Server 对象的方法。

因此,对于特定的服务器对象,我必须获取其所有相关的 Cpe 对象。

我可以做些什么来执行这个操作?

我想我可以这样做:

  1. 对于特定的服务器进入服务器表我获取相关cpe_id的列表进入Server_Cpe表

  2. 然后我在这个列表上进行迭代,获取所有相关 cpe 对象的列表 Cpe table

  3. 最后我把这个列表的引用作为我的服务器类中的 cpeList

这是正确的解决方案还是我可以通过其他方式做得更好?

【问题讨论】:

    标签: c# asp.net sql .net sql-server


    【解决方案1】:

    我建议你使用LINQ

    这样,db 表将转换为对象,然后您可以使用 LINQ 查询对其进行操作。

    例如,要获取每台服务器的 CPE 列表,您可以编写如下代码:

    using (YourDbContext db = new YourDbContext()){
        return (from s in db.Servers
                join s_c in db.Server_Cpe on s.server_id = s_c.server_id
                joim c in db.Cpe on s_c.cpe_id = c.cpe_id
                select c).ToList();
    }
    

    这将为您提供所有 cpes 的列表,然后您可以将其封装在服务器类的属性中,如下所示:

    public List<Cpe> Cpes{
        get{
            return ...above query
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-08
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多