如何使用EF填充列表对象

时间:2015-10-23 00:10:13

标签: c# sql entity-framework linq visual-studio-2012

如何使用此模型的EF和linq填充列表字段

public class Infraccion
{
    public int IdInfraccion { get; set; }
    public string Serie { get; set; }
    public int Numero { get; set; }
    public Direccion Direccion { get; set; }
    public string Comentario { get; set; }
    public DateTime Fecha { get; set; }
    public DateTime Hora { get; set; }
    public string Dominio { get; set; }
    public List<Contravencion> ListaDeContravenciones = new List<Contravencion>(); 
}

我知道如何填充简单的属性,但不知道如何填充Contravencion定义的字段List对象

public class Contravencion
{
    public string Articulo { get; set; }
    public string Inciso { get; set; }
    public int IdContravencion { get; set; }
    public string Descripcion { get; set; }
    public int UfijasMinimo { get; set; }
    public int UfijasMaximo { get; set; }
}

到目前为止,这就是我所拥有的

var listadoInfracciones = (from u in _context.Usuario
                           join ui in _context.UsuarioInfracciones on u.UsuarioId equals ui.UserId 
                           join i in _context.Infraccion on ui.InfraccionId equals i.InfraccionId
                           join d in _context.Direcciones on i.IdDireccion equals d.DireccionId
                           where ui.UserId == usuario.IdUsuario
                           select new Infraccion 
                           {
                               Comentario = i.Comentario,
                               Direccion = new Direccion
                               {
                                   Calle = d.Calle, 
                                   Entre1 = d.Interseccion1, 
                                   Entre2 = d.Interseccion2
                               }, 
                               Dominio = i.Dominio, 
                               Fecha = i.Fecha, 
                               Numero = i.Numero, 
                               Serie = i.Serie, 
                               ListaDeContravenciones = new List<Contravencion>()
                           }).ToList();

哪里找不到填写Contravenciones列表的正确方法。继承DB模型:

enter image description here

我已经看过这些帖子,但不符合我的需求Easy way to fill object How to get data from the database into objectlists fast (with entity framework)

1 个答案:

答案 0 :(得分:0)

好的,所以我找到了解决问题的方法。我很确定这不是最好的方式,但我最不会有结果。如果有人可以完全使用linq做到这一点我当然知道不仅对我而且对整个社区都有帮助。继承我的代码:

var listadoInfracciones = (from u in _context.Users
                       join ui in _context.User_Infraccion on u.UsuarioId equals ui.UserId 
                       join i in _context.Infraccions on ui.InfraccionId equals i.InfraccionId
                       join d in _context.Direccions on i.IdDireccion equals d.DireccionId
                       where ui.UserId == usuario.IdUsuario
                       select new Infraccion 
                       {
                           Comentario = i.Comentario,
                           Direccion = new Direccion
                           {
                               Calle = d.Calle, 
                               Entre1 = d.Interseccion1, 
                               Entre2 = d.Interseccion2
                           }, 
                           Dominio = i.Dominio, 
                           Fecha = i.Fecha, 
                           Numero = i.Numero, 
                           Serie = i.Serie,
                           IdInfraccion = i.InfraccionId
                       }).ToList();

        foreach (var inf in listadoInfracciones)
        {
            var test = (from contra in _context.Contravencions
                        where contra.Infraccion_Contravencion.Any(c => c.InfraccionId == inf.IdInfraccion)
                        select new Contravencion
                        {
                            Articulo = contra.Articulo,
                            Inciso = contra.Inciso,
                            UfijasMaximo = contra.UFijasMax,
                            UfijasMinimo = contra.UFijasMin,
                            Descripcion = contra.Descripcion,
                            IdContravencion = contra.ContravencionId
                        }).ToList();
            inf.ListaDeContravenciones = test;
        }

干杯!