Context db = new Context();
List<Invoice> invoice =
(from LocalInvoice in db.Invoices
where LocalInvoice.Site_Id == this.SiteIdentifier
select LocalInvoice).ToList();

Devuelve una lista de registros. Quiero seleccionar el último en la lista.
He intentado .ToList().LastOrDefault();
pero el error de im que consigue es que no se puede convertir el tipo de ‘factura’ a ‘del Sistema.Las colecciones.Genérica.Lista.

¿Por qué está diciendo este no me he declarado en la factura como una lista List<Invoice> invoice

Cualquier ayuda la agradezco mucho.
Ta


EDITAR
Gracias por la respuesta a todos he intentado lo que todos han aconsejado y cada vez me estoy poniendo el error: El operador de consulta ‘LastOrDefault’ no es compatible.

También no he hecho explica lo que estoy tratando de hacer en general que puede estar causando un problema.
Tengo una tabla que contiene todas las facturas, cada una con un independiente ‘id’. Sin embargo, cada registro tendrá un SiteIdentifier columna, que se utiliza varias veces para diferentes facturas.
Por lo que cada Sitio puede tener varias facturas.

Tratando de obtener la más reciente Factura para el sitio.
Así que decir que la factura

id SiteIdentifier 
73 25
74 25
75 25

Yo estaba tratando de obtener todos los registros donde el SiteIdentifier == este.SiteIdentifier(e.g.25), a continuación, obtener la más reciente disco que tendría que beeing id de factura 75.

Alguien tiene alguna idea?
Gracias de nuevo por toda la ayuda

InformationsquelleAutor John | 2013-03-27

3 Comentarios

  1. 23

    LastOrDefault va a devolver un único elemento. Usted no debe llamar ToList sin aplicar un filtro en primer lugar, recuperar todas las filas de la base de datos, mientras que sólo se necesita uno.

    var invoice = db.Invoices.LastOrDefault(s => s.Site_Id == this.SiteIdentifier);

    También tiene que aplicar la orden, si usted está consultando una tabla relacional. LastOrDefault sólo tiene sentido con las colecciones en memoria. Parece que no es compatible con los objetivos EF y generará una excepción.

    Mejor solución es a la inversa el pedido y el uso FirstOrDefault método:

    var invoice = db.Invoices.OrderByDescending(s => s.Id) 
                             .FirstOrDefault(s => s.Site_Id == this.SiteIdentifier);
    • Gracias por la respuesta, por favor consulte edición de
    • leer mi segundo ejemplo. Se debe trabajar.
    • el segundo ejemplo que funciona, pero SÓLO para la primera o por defecto. im miedo de que me necesitan específicamente el más reciente registro en la DB. .la última es tirar un error El operador de consulta de la «Última» no es compatible., y lastordefault es el mismo que el original de error en mi post original. Tiene usted alguna idea?
    • Es por eso que usted está ordenando en primer lugar. Yo supuse que el registro con el más grande de la Identificación sería la más reciente. Remoto secuencias no se comportan como en la memoria, que no tiene manera de decidir cuál es la última a menos que usted se lo indique cómo. Es por eso que LastOrDefault no es compatible, usted tiene que utilizar FirstOrDefault.
    • Ahh sí, gran trabajo….gracias por toda la ayuda Ufuk
  2. 5

    LastOrDefault devolverá una instancia de una Factura, no es una colección, por lo tanto, cambiar el tipo de variable.

    Invoice invoice =
       (from LocalInvoice in db.Invoices
        where LocalInvoice.Site_Id == this.SiteIdentifier
        select LocalInvoice).LastOrDefault();

    o aún más limpia:

    var invoice = db.Invoices.LastOrDefault(i => i.Site_Id == this.SiteIdentifier);
    • Gracias por la respuesta, por favor consulte edición de
  3. 0

    LastOrDefault va a devolver un único elemento, no List. Este trabajo sería:

    Invoice invoice =
        (from LocalInvoice in db.Invoices
         where LocalInvoice.Site_Id == this.SiteIdentifier
         select LocalInvoice)
        .LastOrDefault();
    • Realmente ineficaz! Se consulta la base de datos de todos los registros y tomar la última en la aplicación, no en la base de datos secundarios.
    • Gracias por la respuesta, por favor consulte edición de

Dejar respuesta

Please enter your comment!
Please enter your name here