【问题标题】:Return <list> values from method从方法返回 <list> 值
【发布时间】:2012-06-26 11:34:38
【问题描述】:

我需要从我的桌子上为特定患者获取所有预约,为此我尝试过,

public List<Appoinment> GetAppoinments()         //here Appointment is a class.
    {
        List<Appoinment> appointments = null;

        foreach (DataObject.Appointment appointment in
                   dataEntities.Appointments.Where(a => a.PATIENTID == PatientId))
        {

        }

        return appointments;
    }

在我的 Appointment 类和表中,我有 PatientId、doctorid、约会日期等字段,像这样,

在这里,在我尝试过的 foreach 循环中,

appointments.add(appointment);

它的严重错误,它不能自动从数据库表约会转换为类约会,对吧。

我不知道如何做到这一点,有人可以在这里帮助我吗,在此先感谢

【问题讨论】:

  • 你应该做appointements.Add(new Appointment {ParientId = ..., OtherStuff = ...}),根据你正在迭代的当前约会。
  • 还可能想在添加元素之前初始化空列表!
  • 感谢投反对票和投赞成票
  • 您或许应该向我们展示Appointment 类的接口。没有他们就很难提供帮助。
  • 谢谢,我刚刚尝试了 Craig 的方法,它的工作原理

标签: c# asp.net entity-framework


【解决方案1】:
public List<Appointment> GetAppointments()      
{
    return dataEntities.Appointments
                       .Where(a => a.PATIENTID == PatientId)
                       .Select(a => new OtherNamespace.Appointment 
                                    {
                                        Id = a.Id,
                                        Name = a.Name,
                                        // etc.
                                    })
                       .ToList();
}

【讨论】:

  • 我遇到错误,无法转换 int?到 int,像这样,y
  • 当然。如果您在一种类型上有属性int Foo,在另一种类型上有int? Foo,那么您必须转换,例如Foo = a.Foo.HasValue ? a.Foo.Value : 0,
【解决方案2】:

你可以这样做:

dataEntities.Appointments.Where(a => a.PATIENTID == PatientId)
  .Select (new Appoinment { ... set values from DB element });

【讨论】:

  • 是的,将其转换为列表。
  • 其显示错误,例如,无法从数据库预约隐式转换为业务对象预约
【解决方案3】:

您将 Data.Appointment 转换为 Your.Appointment。

你可以这样做。

My.Appoint resultAppointment = new My.Appointment();
resultAppointment.Id = dataAppointment.Id

但更好的方法是在数据点上应用投影。生成的 sql 查询将只获取必要的字段

public List<Appoinment> GetAppoinments()         //here Appointment is a class.
    {
        return dataEntities.Appointments.Where(a => a.PATIENTID == PatientId))
                                        .Select(a => new Appointment() { Prop1 = a.Prop1})
                                        .ToList();

    }

【讨论】:

    【解决方案4】:

    我同意上面的解决方案....但是, 如果您必须经常编写此类映射代码...即将一个对象的属性复制到另一个对象的代码,那么您可以考虑使用 Automapper

    https://github.com/AutoMapper/AutoMapper

    【讨论】:

    • 不,不要使用 AutoMapper。 IQueryable&lt;T&gt; 没用
    猜你喜欢
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 2022-07-11
    • 2012-11-26
    • 2023-03-30
    相关资源
    最近更新 更多