Jusqu'à présent, je trouve que Linq peut être utilisé sur des champs existants et des propriétés d'une classe, pas sur des propriétés virtuelles. En d'autres termes, ITypedList ne peut pas travailler avec Linq, même par Linq dynamique.Comment faire Linq sur ITypedList?
J'ai essayé le code suivant:
IQueryable contact ; ...
dynamic l = contact.Select("Customer.Name as Name");
// Customer is a virtual property provided by the interface of ITypedList.
Ensuite, j'ai rencontré l'exception de "Non linkedPropertyName ou d'un champ 'Client' existe dans le type 'Contact'".
I tracée en Linq dynamique et trouvé le code suivant soulevé l'exception:
MemberInfo member = FindPropertyOrField(type, id, instance == null);
if (member == null)
throw ParseError(errorPos, Res.UnknownPropertyOrField,
id, GetTypeName(type));
return member is PropertyInfo ?
Expression.Property(instance, (PropertyInfo)member) :
Expression.Field(instance, (FieldInfo)member);
dans le procédé d'expression ParseMemberAccess (type de type, par exemple d'expression).
Il est évident que seul le membre réel des champs et des propriétés est pris en charge dans Linq.
Mais je m'attends toujours à ce que quelqu'un ait trouvé un moyen de faire Linq sur les propriétés virtuelles.
Si vous trouvez un moyen de le faire, partagez votre expérience.
Nous vous remercions à l'avance,
Ying