Tengo la siguiente expresión

 var list = techlinks.GetItems().Where(p =>  p.Status == 1).ToList();

Quiero cambiar esto para que quiero para seleccionar la fecha más temprana de valor por ejemplo

 var list = techlinks.GetItems().Where(p =>p.Date is earliest && p.Status == 1).ToList();

Por favor, hágamelo saber lo que a insertar para p.Fecha más temprana

Gracias

  • Sugerencia: DateTime implementa IComparable.
InformationsquelleAutor J. Davidson | 2014-10-01

6 Comentarios

  1. 18

    puede utilizar OrderBy o OrderByDescending() para ordenarlos en la Fecha en esta manera:

    var list = techlinks.GetItems()
                        .Where(p => p.Status == 1)
                        .OrderBy(x=>x.Date).First(); //this will give oldest date

    y:

    var list = techlinks.GetItems()
                        .Where(p => p.Status == 1)
                        .OrderByDescending(x=>x.Date).First(); //this will give latest date
    • Esta solución devuelve un único valor que coincida con el más antiguo/fecha más reciente, no la lista, como la expresión utilizada en la pregunta sugiere.
    • OP quiere conseguir la primera fecha de registro
  2. 3

    Aquí otra forma.

    var list=techlinks.GetItems()
                      .Where(p=>p.Status==1)
                        .Min(d => d.Date)
                          .Single();
  3. 2

    Si puede haber varios elementos, todos ellos con la fecha más temprana:

    var list = techlinks.GetItems()
        .Where(p => p.Status == 1)
        .OrderBy(x=>x.Date)
        .GroupBy(x => x.Date)
        .First()
        .ToList()
  4. 0

    Un poco depende de lo que GetItems() de techLinks no, pero algo así como que se debe trabajar:

    var list = techlinks.GetItems().Where(p => p.Date == techlinks.GetItems().Min(x => x.Date) && p.Status == 1).ToList();

    Si GetItems() método realmente alcanza la base de datos, usted puede almacenar su resultado de la primera y la use dos veces:

    var allItems = techLinks.GetItems();
    var list = allItems.Where(p => p.Date == allItems.Min(x => x.Date) && p.Status == 1).ToList();
    • Por qué varias consultas?
    • No hay necesidad de GetItems dos veces.
    • Ni siquiera compilar desde techlinks.GetItmes().Min(x=>x.Date) volvería un DateTime que no puede ser ANDed con un bool.
    • tienes razón, fijo
    • Me he tomado la espalda de mi downvote, pero tener un «subconsulta» hará que este ineficiente. Al menos me gustaría calcular el valor min fuera de la Where llamada.
    • como escribí – depende de si GetItems() método se ejecuta la base de datos de la llamada o no. Pero podría estar en lo correcto – no sé lo que sería más rápido encontrar min fecha de la primera y, a continuación, seleccione los elementos con que fecha, o el fin de toda la tabla para obtener el primer y último elemento.
    • No he votada abajo pero esta respuesta es aún ineficiente. DB llamar o no, lo tendrá todavía bucle de la colección dos veces.
    • Si piensa reproducción en bucle de una colección para buscar un solo valor (min fecha) y, a continuación, filtrar por este valor, en comparación con el pedido de toda la colección para obtener 1 resultado superior hay 2 muy diferentes operaciones. Por otra parte, la solución con FirstOrDefault() devuelve un solo resultado, y la pregunta que sugiere (mediante el uso de ToList()) que el autor está buscando una colección.

  5. 0

    Si solo quieres 1 usted podría ir con

    techlinks.GetItems().Where(p => p.Status == 1).OrderBy(c => c.Date).FirstOrDefault();

    de lo contrario me gustaría que se rompen en dos declaraciones

    var date = techlinks.Min(c=>c.Date);
    techlinks.GetItems().Where(p => p.Status == 1 && c.Date == date).ToList();

    también ser conscientes de cómo las fechas en que se insertan, DateTime.Ahora va a agregar componentes de tiempo de modo que pueda tener para hacer algo retorcido como este

    techlinks.GetItems().Where(p => p.Status == 1 && c.Date.Year == date.Year && c.Date.Month == date.Month && c.Date.Day == date.Day).ToList();
    • Para esto último puedes usar DateTime.Date para comparar sólo la porción de fecha sin la hora.
    • si es un Linq to entities – no se puede
    • Cierto, pero esto no se parece a Linq to entities.
  6. 0
    Student student = _context.Set<Student>()
              .Where(p => p.StudentID == ID.Value)
              .OrderBy(p => p.AddedDate)
              .FirstOrDefault();

Dejar respuesta

Please enter your comment!
Please enter your name here