Question

J'ai une entité appelée new_trexmail avec un attribut de chaîne appelé new_contextline.

J'essaie d'obtenir une liste d'entités où new_contextlineis dans une liste définie.

Le code suivant échoue avec l'erreur: NotSupportedException: Invalid 'where' condition. An entity member is invoking an invalid property or method.

string[] test = new[]{"aaa", "hhh"};

var query = from n in New_trexmailSet
            where test.Contains(n.New_contextline)
            select n;

Je comprends pourquoi cette erreur est lancée, mais je me demande s'il est possible de faire l'équiavalent d'une clause dans XRM.

Si c'est possible, comment puis-je faire en sorte que XRM s'exécute SELECT * FROM new_trexmail WHERE new_contextline in ('aaa', 'hhh')?

Merci,

David

Était-ce utile?

La solution

Découvrez le (plus longtemps que souhaité) Liste des limitations LINQ, en particulier la limitation du where clause:

Le côté gauche de la clause doit être un nom d'attribut et le côté droit de la clause doit être une valeur. Vous ne pouvez pas régler le côté gauche sur une constante. Les deux côtés de la clause ne peuvent pas être des constantes. Prend en charge les fonctions de chaîne contient, StartWith, Endswith et Equals.

Alors depuis que test n'est pas un attribut CRM, vous ne pouvez pas appeler Contains dessus. Cependant, une façon de contourner cela est d'utiliser "Linq dynamique"Comme développé par Scottgu et comme démontré ci-dessous:

//must include the below using statements
//using System.Linq;
//using System.Linq.Dynamic;

var trexmailSet = New_trexmailSet;

string[] test = new[] { "aaa", "hhh" };

string whereClause = "";

foreach (string name in test)
{
    whereClause += string.Format("new_contextline = \"{0}\" OR ", name);
}

trexmailSet = trexmailSet.Where(whereClause.Substring(0, whereClause.Length - 4));

var query = from n in trexmailSet
            select n;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top