【问题标题】:is there a way to get rid of DTO有没有办法摆脱 DTO
【发布时间】:2017-01-17 11:07:11
【问题描述】:

我正在使用实体框架。我有以下查询,其中我使用两个表 Application 和 Employee 通过应用程序表中的外键 EmployeeID 连接来获取数据。这些表具有 1-1 关系。 有没有办法简化以下代码并摆脱 DTO Employee1 和自动生成的Employee类一样

public List<Employee1> GetApplicant(int ApplicationID)
{
    var context = new FPSDB_newEntities();       
    var data = (from a in context.Applications
                join e in context.Employees on a.EmployeeID equals e.EmployeeID
                where
                (
                   a.ApplicationID == ApplicationID
                )
                select new Employee1
                {
                    EmployeeID = e.EmployeeID,
                    SecondEmail = e.SecondEmail,
                    EmailID = e.EmailID,
                    Title = e.Title,
                    Name = e.Name,
                    Rank = e.Rank,
                    POBox = e.POBox,
                    Phone = e.Phone,
                    JoinDate = e.JoinDate,
                    Status = e.Status,
                    DepartmentID = e.DepartmentID.Value,
                    NameString = e.NameString,
                    Department = e.Department,
                    ParentDept = e.ParentDept,
                    DepartmentAr = e.DepartmentAr,
                    NameAr = e.NameAr,
                    NameStringAr = e.NameStringAr,
                    TitleAr = e.TitleAr
                }).ToList();
    return data;
}

【问题讨论】:

  • 如果这两个类确实相同,那么如果您将返回类型更改为public List&lt;Employee&gt; 并相应地更改您的选择语句,那么它应该可以工作。假设您可以更改应用的其余部分以接受不同的类型。
  • 不,它不起作用并给出错误stackoverflow.com/questions/41676957/…
  • 我的建议与公认的答案几乎相同,只是我没有把它拼出来。所以我认为这个答案对你有用。您刚刚将我链接到的问题较旧,所以我很困惑这有什么关系或问题是什么。

标签: asp.net entity-framework dto


【解决方案1】:

如果需要返回Employees列表,只需要选择指向Employee的e,不要使用Employee1作为DTO。

public List<Employee> GetApplicant(int ApplicationID)
{
    var context = new FPSDB_newEntities();       
    var data = (from a in context.Applications
                join e in context.Employees on a.EmployeeID equals e.EmployeeID
                where
                (
                   a.ApplicationID == ApplicationID
                )
                select e).ToList();
    return data;
}

另一种方式是这样,因为可读性我更喜欢:

public List<Employee> GetApplicant(int ApplicationID)
{
    var context = new FPSDB_newEntities();       
    var data = context.Applications.Where(p=>p.ApplicationID == ApplicationID).Select(p=>p.Employee).ToList();
    return data;
}

【讨论】:

  • 又是一个完美的答案! :) 谢谢
  • 不客气。但是你应该做一些关于 LINQ 的教程 :)
猜你喜欢
  • 2011-06-15
  • 1970-01-01
  • 2016-03-16
  • 1970-01-01
  • 2022-01-10
  • 2019-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多