Combine varias entidades LINQ en una sola entidad, incluido el registro relacionado superior

Tengo 2 tablas llamadas Persona y Actividad. Cada persona puede tener múltiples actividades.

Los campos en Persona son PersonId, Nombre, Edad. Los campos en Actividad son ActivityId, PersonId, Descripción, StartDate, EndDate, Flag

Creé una nueva Entidad llamada PersonAndLatestActivity que tiene algunos campos con nombres similares de Persona y Actividad. es decir, ID de persona, nombre, edad, descripción, fecha de inicio, fecha de finalización, bandera

¿Cómo proyecto a cada persona y su ÚLTIMA actividad en la entidad PersonAndLatestActivity?

Necesito lograr esto usando LINQ para Entidades ya que estoy usando EF4 Code First, es decir: -

public IQueryable<PersonAndLatestActivity> GetAllPeopleAndLatestActivityList()
{
    var result = (from x in db.People
        select new 
        {

        }                
    return result;
}

preguntado el 04 de julio de 12 a las 02:07

2 Respuestas

No estoy seguro de cómo podría hacer esto como consultable, pero si ayuda, así es como lo haría con los objetos:

public IQueryable<PersonAndLatestActivity> GetAllPeopleAndLatestActivityList()
{
    List<PersonAndLatestActivity> list = new List<PersonAndLatestActivity>();
    foreach(person in db.People.ToList()){
        var act = db.Activity.Where(x=>x.PersonId == person.PersonId).OrderBy(x=>x.Date).Single();
        list.Add(new PersonAndLatestActivity{
            PersonId = person.PersonId,
            ActivityId = act.ActivityId,
            etc...
        });
    }
    return result;
}

Respondido 04 Jul 12, 08:07

Esta es una forma de hacerlo:

from p in db.People
from a in p.Activities.OrderByDescending(act => act.StartDate).Take(1)
select new PersonAndLatestActivity { p.PersonId, ..., a.StartDate, ... }

asumiendo que hay una propiedad de navegación p.Activities, de lo contrario, debe usar una unión.

Respondido 06 Jul 12, 20:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.