Problème d'Include et de Where
Salut,
Nouveau dans l'EF, je butte comme visiblement bcp de monde sur la même pierre, et malgré mes recherches ne n'arrive pas à m'en sortir. Aussi je vais appel à vos connaissances.
Je me lie a PostgreSQL via EF6, npgsql et EF6.npgsql.
Soit une table minutes contenant plein de choses et qui est liée à plusieurs autres tables, mais surtout qui contient le champs id_minute (int).
Soit la table intermédiaire minutes_anc_lots qui contient les champs id_minute (int), id_anc_lot (str) et ptie (bool). Vu qu'il y a le champs ptie, EF ne fait pas de lien many to many.
Et enfin la table anc_lots qui contient, entre autre id_anc_lot (str), code_ds (str), et no_lot (str).
Le but de ma recherche est de sortir toutes les minutes dont dont les anc_lots répondent a certains critères de code_ds et de no_lot (en y incluant toutes les autres tables liées, mais ça je suppose que ce sera juste une liste d'Include).
Je n'ai pas réussi à faire le Linq d'un coup, alors j'ai essayé en 2 étapes, mais je n'y arrive pas plus.
J'ai d'abord essayé
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| if (string.IsNullOrEmpty(SelectedDesSec.Code))
{
var minutes = ctr.minutes
.Include(min => min.minutes_anc_lots.Select(mal => mal.anc_lots)
.Where(al => al.no_lot.CompareTo(ALotFrom) >= 0
&& al.no_lot.CompareTo(ALotTo) <= 0)
)
.ToList();
}
else
{
var minutes = ctr.minutes
.Include(min => min.minutes_anc_lots.Select(mal => mals.anc_lots)
.Where(al => al.code_ds == SelectedDesSec.Code
&& al.no_lot.CompareTo(ALotFrom) >= 0
&& al.no_lot.CompareTo(ALotTo) <= 0)
)
.ToList();
} |
Mais je reçois l'erreur
Citation:
The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties.
Nom du paramètre : path
Je ne comprend pas de quoi il s'agit, et mes recherches ne m'ont pas permis de trouver l'explication.
Ne réussissant pas à résoudre ce problème, j'ai tenté une approche en 2 étapes. Mais ça ne fonctionne pas non plus.
J'en suis à :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| List<minutes_anc_lots> m_a_l = null;
if (string.IsNullOrEmpty(SelectedDesSec.Code))
m_a_l = ctr.minutes_anc_lots
.Include("anc_lots")
.Where(al => al.anc_lots.no_lot.CompareTo(ALotFrom) >= 0
&& al.anc_lots.no_lot.CompareTo(ALotTo) <= 0).ToList() as List<minutes_anc_lots>;
else
m_a_l = ctr.minutes_anc_lots
.Include("anc_lots")
.Where(al => al.anc_lots.code_ds == SelectedDesSec.Code
&& al.anc_lots.no_lot.CompareTo(ALotFrom) >= 0
&& al.anc_lots.no_lot.CompareTo(ALotTo) <= 0).ToList() as List<minutes_anc_lots>;
var test = ctr.minutes
.Include("minutes_anc_lots")
.Include("anc_lots")
.Any(mal => m_a_l.Contains((minutes_anc_lots)mal.minutes_anc_lots)); |
le m_a_l me donne bien les minutes_anc_lots concernés, mais au moment du passage à var test, j'ai l'erreur
Citation:
Unable to create a constant value of type 'Appli.minutes_anc_lots'. Only primitive types or enumeration types are supported in this context.
Malheureusement mes recherches ne m'ont pas plus permis de trouver de solution à cette erreur.
Qu'est-ce que je fais mal et comment dois-je me corriger ?
Merci.