Disons que j'ai 4 tableaux A, B, C et D les performances des requêtes simples
Quelle est la meilleure façon d'obtenir la liste des B d'être dans une liste déroulante. La condition est que chaque enregistrement doit avoir associé liste des D1 de sorte que si B n'a pas d'enregistrements D1 je ne devrais pas l'afficher dans la liste déroulante
D1 est une classe enfant de D
Comment je l'ai fait il:
// number 2 to specify the selected A Table normally it's a variable
var b_Per_A = Uow.B.GetAll().Where(x => x.A_Id == 2).ToList();
var b_list = new List<B>();
foreach (var b in b_list)
{
var d =
Uow.D1.GetAll().Where(x => x.C.B_Id == b.Id);
if (!d.IsNullOrEmpty()) // extension method that checks if a collection is null or empty
{
b_list.Add(b);
}
}
il fonctionne, mais il est lent
MISE À JOUR:
La signature de GetAll()
est
IQueryable<T> GetAll();
MISE À JOUR 2:.
Mon modèle est
public class A
{
public int Id { get; set; }
public string Name { get; set; }
public IEnumerable<B> ChildBs { get; set; }
}
public class B
{
public int Id { get; set; }
public string Name { get; set; }
public A ParentA { get; set; }
public IEnumerable<C> ChildCs { get; set; }
}
public class C
{
public int Id { get; set; }
public string Name { get; set; }
public B ParentB { get; set; }
public IEnumerable<D> ChildDs { get; set; }
}
public class D
{
public int Id { get; set; }
public string Name { get; set; }
public C ParentC { get; set; }
}
public class D1 : D
{
/// other properties
}
Pourquoi procédure que vous utilisez ne sont pas stockées plutôt que LINQ? –
Avez-vous des propriétés de navigation sur vos objets d'entité? C'est à dire. 'C.ChildDs' et' D.ParentC' –
N'utilisez pas 'GetAll()', puis filtrez-le. Filtrez-le directement sinon, si vous avez 1000 enregistrements, il recevra tous les 1000 enregistrements, puis vous essayez de filtrer ce qui aura un impact sur les performances. – Thennarasan