2017-01-09 2 views
0

J'ai utilisé Dynamic Linq dans mon application et, malheureusement, cela ne fonctionne pas. Voici mon exemple de code.Linq Querystring dynamique ne fonctionne pas avec les opérateurs mixtes avec contient

List<string> contains = new List<string>() { "Poland", "Ecuador" }; 
List<object> array = new List<object>(); 
array.Add("Austria"); 
array.Add("Eritrea"); 
array.Add(contains); 

//this works 
var data0 = Contact.GetContactsList().AsQueryable().Where("@0.Contains(outerIt.Country)", array); 

//this does not work 
var data = Contact.GetContactsList().AsQueryable().Where("Country.Equals(@0) OR it.Country.Equals(@1) OR @3.Contains(outerIt.Country)", array.ToArray()); 

J'ai une liste de contacts liés aux pays. Vous pouvez voir que j'ai utilisé des opérateurs mixtes i.e est égal et contient. Si contient est utilisé séparément alors cela fonctionne qui est correct. J'ai essayé de faire une nouvelle chose ici, en utilisant à la fois les opérateurs Equals et Contains est la même chaîne de requête. Je joins l'image am décrivant la sortie ou data0 et erreur lors du traitement pour obtenir data

enter image description here

Merci.

+0

Lorsque vous avez créé tableau en tant que '' liste et que 'y ajouter contains' vous vous retrouvez avec une liste qui a deux premiers éléments qui sont des chaînes « Autriche », « l'Erythrée » et un troisième élément qui est lui-même une liste avec 2 chaînes en elle. Cela semble étrange et probablement pas ce que vous vouliez faire. Les requêtes que vous avez écrites ne référencent pas non plus l'échantillon de données que vous avez envoyé , il est donc difficile de savoir quel est le problème avec votre requête. peut-être envoyer un échantillon avec les types de données réels que vous interrogez? –

+0

On dirait une simple faute de frappe - '@ 3' devrait être' @ 2'. –

Répondre

0

J'ai fait une erreur stupide là-bas. Le code fonctionne bien mais j'ai donné un mauvais index là-bas. L'index 3 doit être remplacé par 2.: P enter image description here

Le résultat est joint.