Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ASP.NET和具有多个表的Linq 2 Sql的三层应用程序_C#_Asp.net_Linq To Sql_3 Tier - Fatal编程技术网

C# 使用ASP.NET和具有多个表的Linq 2 Sql的三层应用程序

C# 使用ASP.NET和具有多个表的Linq 2 Sql的三层应用程序,c#,asp.net,linq-to-sql,3-tier,C#,Asp.net,Linq To Sql,3 Tier,大家好,我的3层应用程序有问题,我不知道如何在3层体系结构应用程序中使用linq2sql从多个表中获取数据这里是每个层的代码 GestionProjetCommon项目 客户端类: public class Client { private int _ID; public int ID { get { return _ID; } set { _ID = value; } } private string _Name;

大家好,我的3层应用程序有问题,我不知道如何在3层体系结构应用程序中使用linq2sql从多个表中获取数据这里是每个层的代码

GestionProjetCommon项目

客户端类:

public class Client
{
    private int _ID;
    public int ID
    {
        get { return _ID; }
        set { _ID = value; }
    }
    private string _Name;
    public string Name
    {
        get { return _Name; }
        set { _Name = value; }
    }
}

项目类别:

public class Projet
{
    private int _ID;
    public int ID
    {
        get { return _ID; }
        set { _ID = value; }
    }
    private string _Title;
    public string Title        {

        get { return _Title; }
        set { _Title= value; }

    }

   private int _IDClient;
    public int IDClient
    {
        get { return _IDClient; }
        set { _IDClient = value; }
    }
}
GestionProjetDAL项目

GestionProjetDA类:

public class GestionProjetDA
{
    private GestionProjetDADataContext db = new GestionProjetDADataContext();
    public List<GestionProjet.Client> GetClients() //This Works Fine No Problem !
    {
        var req = from clt in db.Clients select clt;

        List<GestionProjet.Client> clientList = new List<GestionProjet.Client>();
        foreach (Clients item in req)
        {
            clientList.Add(new GestionProjet.Client() { ID = item.ID, Nom = item.Nom });
        }
        return clientList;
    }

public List<GestionProjet.Client> GetProjectClient()
    {
        var req = from prj in db.Projets
                  from clt in db.Clients
                  where clt.ID == prj.IDClient
                                  select new
                                  {
                                      Name=clt.Name,
                                      Projet = prj.Title,
                                  };
        List<GestionProjet.Client> clientProjectList = new List<GestionProjet.Client>();
      foreach (var clt in req)
        {
//I Don't know what to do in here and get the Data From both of the Tables
        }

    }
 }
公共类GestionProjetDA
{
private GestionProjetDADataContext db=new GestionProjetDADataContext();
public List GetClients()//这很好,没问题!
{
var req=来自数据库中的clt。客户端选择clt;
List clientList=新列表();
foreach(请求中的客户项目)
{
Add(new GestionProjet.Client(){ID=item.ID,Nom=item.Nom});
}
返回客户列表;
}
公共列表GetProjectClient()
{
var req=来自数据库项目中的prj
从数据库中的clt.Clients
其中clt.ID==prj.IDClient
选择新的
{
Name=clt.Name,
项目名称,
};
List clientProjectList=新列表();
foreach(要求中的var clt)
{
//我不知道在这里做什么,从两个表中获取数据
}
}
}
GestionProjetBusiness项目

GestionProjetB类:

 public class GestionProjetB
{
    private GestionProjetDAL.GestionProjetDA GPDA = new GestionProjetDAL.GestionProjetDA();

    public List<Client> GetClients()
    {
        return GPDA.GetClients();
    }

  //Here i Should put the 2nd Method

}
公共类GestionProjetB
{
private GestionProjetDAL.GestionProjetDA GPDA=new GestionProjetDAL.GestionProjetDA();
公共列表GetClients()
{
返回GPDA.GetClients();
}
//这里我应该放第二种方法
}
正如您所看到的,我从一个表中获取数据没有问题,但唯一的问题是从多个表中获取数据

我整晚都在寻找解决办法,但我没有找到。请帮帮我 谢谢

创建一个DTO类, 比如:

public class ClientDTO
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string ProjectName { get; set; }
    }
现在编写一个好的linq表达式来填充DTO类:

 public List<GestionProjet.Client> GetProjectClient()
    {
        return (from prj in db.Projets
                  join clt in db.Clients on prj.IDClient equals clt.ID
                                  select new ClientDTO
                                  {
                                      Name = clt.Name,
                                      ProjetName = prj.Title,
                                      ID = clt.ID
                                  }).ToList();

    }
public List GetProjectClient()
{
返回(来自数据库项目中的prj
在数据库中加入clt。prj.IDClient上的客户端等于clt.ID
选择new ClientDTO
{
Name=clt.Name,
项目名称=项目名称,
ID=clt.ID
}).ToList();
}

我希望我正确理解了您的问题,请原谅我在发布之前没有测试代码。

您的方法
GetProjectClient
不应该获取项目id作为输入,即返回特定项目的客户吗?不,我必须加入所有客户的名称和他们的项目,比如从客户C中选择*,项目P,其中C.ID=P.ID客户端感谢Maziar的帮助,但我已经考虑过了,假设我有6个表,这些表有15个以上的关系,那么为每个关系创建一个DTO类是否正确?这很好@Maziar Taheri,非常感谢,但是告诉我,如果我有很多具有多个关系的表怎么办?不客气,实际上,DTO对象必须根据上下文的要求定义为丰富的,例如,您的DTO类可能包含另一个DTO类的列表。但是为了提高效率,这个列表可能会被大多数DAL方法填满,并保持为空。一种特殊的方法是将数据返回到列表中已填充的对象。毕竟,您可能知道LINQ表类与相关表有关系,但在某些情况下使用这些关系可能效率低下,另一方面,这不是一个好的三层模型。“例如,您的DTO类可能包含另一个DTO类的列表。但为了提高效率,此列表可能会被大多数DAL方法填充,并且保持为空“请使用示例!?代码片段!”!