Lorsque vous utilisez le tag linq-to-entities Je suppose que vous utilisez le framework d'entité. Il me semble que vous avez modélisé une relation un-à-plusieurs entre Parent et Enfant: chaque Parent a zéro ou plusieurs Enfants, et chaque Enfant appartient à exactement un Parent.
Il se peut aussi que vous ayez une relation plusieurs-à-plusieurs. Les classes sont légèrement différentes (et la base de données aura une table supplémentaire que vous n'avez pas dans votre DbContext), mais le problème reste le même.
Cela pourrait être dû à vos simplifications, mais je vois des choses étranges dans vos classes qui pourraient causer vos problèmes.
Dans le cadre d'une entité à-plusieurs appropriée est modelée comme suit:
public class Parent
{
public int Id {get;set;}
public string name{get;set;}
// Every parent has zero or more Children
public virtual ICollection<Child> Children {get;set;}
}
public class Child
{
public int id {get;set;}
public bool Imported{get;set;}
public DateTime? TimeSpan {get;set;}
// every Child belongs to exactly one Parent using foreign key
public int ParentId {get; set;}
public Parent Parent {get; set;}
}
La collection des enfants dans votre parent ne peut pas être une liste. Que signifierait ChildList [3]?
Par ailleurs, cette collection devrait être virtuelle (Voir SO: Understanding code first virtual properties)
Vous avez écrit:
Fondamentalement, je suis en train d'inclure tous les parents des enfants, mais pour les par id descendant puis vérifiez si le premier (par exemple le plus récent) a importé == false et timeSpan == null, et n'inclut que les lignes parent ayant un enfant répondant à cette condition.
Un peu difficile à comprendre, mais il semble que vous avez une séquence de parents, et que vous voulez que les parents et leurs enfants, où l'enfant le plus haut ChildID ne sont pas importées et a une TimeSpan nulle.
var result = dbContext.Parents
.Select(parent => new
{
// Take all Parent properties you need in your end result, for example
Id = parent.Id,
Name = parent.Name,
Children = parent.Children
.OrderByDescending(child => child.Id),
})
.Select(parent => new
{
Id = parent.Id,
Name = parent.Name,
Children = parent.Childrent,
NewestChild = parent.Children.FirstOrDefault(),
})
// keep only the parents you want to keep:
.Where(parent => parent.NewestChild != null
&& !parent.NewestChild.Imported
&& parent.NewestChild.TimeSpan == null));
peut-être lié https://stackoverflow.com/questions/32751427/conditional-include-in-entity-framework – OmG