none
Obtener 1 registro desde Modelo generado por Entity Frameworks RRS feed

  • Pregunta

  • Buenos días.

    Actualmente tengo modelos generados por Entity Frameworks y para consultar sólo un registro de un modelo desde la vista lo hago de la siguiente manera:

    				@{
    					cont = 0;
    					foreach(var item in ViewBag.AutorizacionAereo)
    					{
    						if (cont == 0)
    						{
    							<span><b>Reason Code:</b> @item.ReasonCode </span>
    						}
    						cont = 1;
    					}
    				}

    Y de esta manera sólo traigo el primer registro que me aparezca (sé que los n siguientes son iguales).

    Hay alguna manera más eficiente de consultar el primer registro de un modelo desde la vista?

    Saludos.



    • Editado Emanuel2018 miércoles, 17 de enero de 2018 12:57
    miércoles, 17 de enero de 2018 12:52

Todas las respuestas

  • Como primera medida puedes quitar lo del "cont" y usar un "break", para que el bucle solo haga una iteracion:

    foreach(var item in ViewBag.AutorizacionAereo)
    {
    	<span><b>Reason Code:</b> @item.ReasonCode </span>
    	break;
    }

    Tambien podrias usar LINQ con una llamada a First() (requerira agregar el correspondiente "using" al principio).

    Pero lo ideal es que cambies el modelo para que en lugar de ser un IEnumerable<Tipo> sea directamente un Tipo, y en el controlador meter el .First() antes de pasarselo a la vista.

    miércoles, 17 de enero de 2018 13:41
  • Y usando el first desde el servidor, como leo los registros en la vista?
    miércoles, 17 de enero de 2018 19:13
  • hola

    >>Hay alguna manera más eficiente de consultar el primer registro de un modelo desde la vista?

    podrias hacer algo como

    @using System.Data.Linq
    
    @{
       var item = ViewBag.AutorizacionAereo.First();
    }
    
    <span><b>Reason Code:</b> @item.ReasonCode </span>

    de esta forma solo tomas el primer item

    igual no entiendo porque envias una lista en el viewbag desde el action si solo vas a utilizar uno solo, porque no lo filtras directo desde el servidor

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 17 de enero de 2018 19:36
  • >>usando el first desde el servidor, como leo los registros en la vista?

    es directo porque envias solo un item

    public ActionResult Index(){
    
       using(var dbcontext = new xxContext()){
    
           ViewBag.AutorizacionAereo = dbcontext.AutorizacionAere.First();
    
       }
    
       return View();
    
    }

    asi envias solo un unica entidad

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 17 de enero de 2018 19:38
  • La mejor opcion seria usar una sentencia Ling firstOrDefault value en tu codigo., el foreach generaria una interaccion innecesaria si solo necesitas el primer valor.

    jueves, 18 de enero de 2018 21:58
  • La mejor opcion seria usar una sentencia Ling firstOrDefault

    Nótese que lo que hace internamente el FirstOrDefault es precisamente equivalente a un foreach con un break tras el primer valor... que es precisamente lo que yo contesté en mi primera respuesta, donde también aclaraba que se podía sustituir por su equivalente en LINQ.

    En este caso particular, el First es mejor que el FirstOrDefault. El First dará una excepcion si no hay ningún valor, mientras que el FirstOrDefault devolverá null y entonces la excepción se producirá un poco más adelante al intentar acceder al valor recuperado. Es mejor que la excepción se produzca en la primera ubicación, porque indica de manera más inmediata cuál es el problema real que ocurrió.




    viernes, 19 de enero de 2018 7:34