Lors de l'écriture d'une méthode pour un service oData j'ai le linq ci-dessous, pour lequel j'ai besoin d'une clause dynamique "where" pour filtrer les résultats (le « nouveau » s dans les jointures sont pour PKs composites dans l'Entity Data Model):Entité Data Model, Dynamic Linq, table multiple dynamic Clause Where, types de retour fortement typés
var query = from pl in CurrentDataSource.ProductListing
join pla in CurrentDataSource.ProductListingAttribute
on new {pl.ProductID, pl.WebCategoryID, pl.ParentProductID}
equals new {pla.ProductID, pla.WebCategoryID, pla.ParentProductID}
join att in CurrentDataSource.Attribute
on pla.AttributeID
equals att.AttributeID
join attItem in CurrentDataSource.AttributeItem
on pla.AttributeItemID
equals attItem.AttributeItemID
select pl;
Mon Linq est pas très bon et je suis en train d'utiliser la classe DynamicQueryable pour générer un « where » à l'exécution (il est construit à partir de diverses variables):
var returnData = query.Where(whereClause);
Depuis la clause "where" filtres sur des valeurs dans l'attribut et entités AttributeItem qu'il contient toujours des choses comme
"((Attribute.Value='foo' AND AttributeItem.Value='bar')
OR
(Attribute.Value='sna' AND AttributeItem.Value='fu'))"
qui échouera à l'exécution depuis « Aucune propriété ou attribut « » champ existe dans le type « ProductListing » ». J'ai essayé de construire un type anonyme dans le "select" qui contient tous les éléments de l'entité ProductListing et ceux de Attribute et AttributeItem dont j'ai besoin pour filtrer, mais j'ai besoin d'une entité fortement typée de type "ProductListing" pour retour de l'appel de méthode.
Quelqu'un peut-il aider? Dois-je utiliser des jointures dynamiques au lieu de Wheres dynamiques? Y a-t-il un moyen de faire face aux entités que vous ne sélectionnez pas? Dois-je choisir un type anonyme/"let" et construire une entité fortement typée après?
S'il vous plaît, toute aide est massivement appréciée.
rposbo