如何在实体框架中选择多个列?

时间:2017-08-25 01:55:56

标签: c# mysql entity-framework

在我的第一个问题中,我没有解释清楚。但现在我需要从实体框架类中选择一些列。

var Muestra = Cecytec.asignatura.Select(Z => new asignatura { nombre = Z.nombre, horasPorSemana = Z.horasPorSemana, nivel = Z.nivel, unidades = Z.unidades }).ToList();

从我的班级(表)“asignatura”我有这个:

public partial class asignatura
{
    public asignatura()
    {
        this.criterioevaluacion = new HashSet<criterioevaluacion>();
        this.evaluacion = new HashSet<evaluacion>();
        this.examen = new HashSet<examen>();
        this.alumno = new HashSet<alumno>();
        this.horario = new HashSet<horario>();
        this.profesor = new HashSet<profesor>();
    }

    public int idAsignatura { get; set; }
    public Nullable<int> horasPorSemana { get; set; }
    public string nombre { get; set; }
    public Nullable<int> nivel { get; set; }
    public Nullable<int> unidades { get; set; }
    public int semestres_idsemestres { get; set; }

    public virtual semestres semestres { get; set; }
    public virtual ICollection<criterioevaluacion> criterioevaluacion { get; set; }
    public virtual ICollection<evaluacion> evaluacion { get; set; }
    public virtual ICollection<examen> examen { get; set; }
    public virtual ICollection<alumno> alumno { get; set; }
    public virtual ICollection<horario> horario { get; set; }
    public virtual ICollection<profesor> profesor { get; set; }
}

我想表明:'nombre','horasPorSemana','nivel','unidades'和'calificacion'

注意:'calificacion'在另一个班级

public partial class evaluacion
{
    public int unidad { get; set; }
    public Nullable<double> calificacion { get; set; }
    public Nullable<int> inasistencia { get; set; }
    public string observaciones { get; set; }
    public int asignatura_idAsignatura { get; set; }

    public virtual asignatura asignatura { get; set; }
}

2 个答案:

答案 0 :(得分:2)

在投影中,您将从数据库投射到实体。您需要做的是两个选项之一:

1)项目到动态对象

var Muestra = Cecytec
    .asignatura
    .Select(Z => new 
        {
            nombre = Z.nombre,
            horasPorSemana = Z.horasPorSemana,
            nivel = Z.nivel,
            unidades = Z.unidades,
            evaluacion_calificacion = Z.evaluacion.Select(e => e.calificacion)
        })
    .ToList();

这将为您提供存储在变量Muestra中的动态对象列表,每个动态对象包含来自评估表的IEnumerablecalificacion值。

2)使用您需要的属性项目到预定义的类

这与上面类似,但您只需定义一个类来保存属性。

public class ProjectionResult
{
    public string nombre { get; set; }
    public Nullable<int> horasPorSemana { get; set; }
    public Nullable<int> nivel { get; set; }
    public Nullable<int> unidades { get; set; }
    public IEnumerable<Nullable<double>> evaluacion_calificacion { get; set; }
}

然后像这样运行你的投影:

var Muestra = Cecytec
    .asignatura
    .Select(Z => new ProjectionResult
        {
            nombre = Z.nombre,
            horasPorSemana = Z.horasPorSemana,
            nivel = Z.nivel,
            unidades = Z.unidades,
            evaluacion_calificacion = Z.evaluacion.Select(e => e.calificacion)
        })
    .ToList();

这将为您提供存储在变量ProjectionResult中的Muestra个对象的列表,每个对象都包含来自评估表的IEnumerablecalificacion值。

答案 1 :(得分:0)

您的回答没问题,但没有显示

evaluacion_calificacion = Z.evaluacion.Select(e => e.calificacion)

始终为null,以解决我这样做的问题:

public class ProjectionResult { public Nullable<int> horasPorSemana { get; set; }
    public string nombre { get; set; }
    public Nullable<int> nivel { get; set; }
    public Nullable<int> unidades { get; set; }
    //public virtual IEnumerable<Nullable<double>> evaluacion_calificacion { get; set; }
    public Nullable<double> calificacion { get; set; } }

并且查询更改了最后一行:

 var Muestra = Actualmente.Select(Z => new ProyeccionAcademica
                {
                    nombre = Z.nombre,
                    horasPorSemana = Z.horasPorSemana,
                    nivel = Z.nivel,
                    unidades = Z.unidades,                        
                    calificacion = Z.evaluacion.First(Find => Find.asignatura_idAsignatura == Z.idAsignatura).calificacion                        
                    }).ToList();

但是谢谢你的快速回答!!!