Question

J'ai deux tables (tableau 1, TABLEAU2 - savoir i unique). Qui a un respectivement 1-à-plusieurs et une clé étrangère entre les colonnes d'identité des deux tables

Utilisation linq2sql Je suis en train de tout sélectionner TABLE1 des entrées telles que leur correspondant TABLEAU2 valeurs contient au moins 1 élément dans la liste Je passe il.

Voici quelques exemples de code que j'utilisais dans LINQPad (programme impressionnant) pour le tester mais je suis obtenir l'erreur NotSupportedException:. Surcharge non prise en charge utilisée pour l'opérateur de requête « Tous »

long[] items = { 3, 5, 8 };
var predicate = PredicateBuilder.False<TABLE2>();

foreach (long i in items)
{
    long t = i;
    predicate = predicate.Or(att => att.ID == t);
}

//TABLE2.Where(predicate).Dump(); //works like a charm

IQueryable query = 
    from t1 in TABLE1
    where t1.TABLE2.AsQueryable().Any(predicate) //problem with this line
    select a;

query.Dump();

UPDATE

Lors de l'utilisation LinqKit dans LINQPad ajouter la référence à LinqKit.dll, décochez la case Inclure PredicateBuilder, puis ajoutez également LinqKit sous l'onglet Espace de noms importations supplémentaires.

Était-ce utile?

La solution

La solution de contournement est

  1. Appel AsExpandable () sur le TABLE1 objet
  2. Appel Compile () sur l'expression variable lorsqu'il est utilisé sur un EntitySet.

Ainsi, votre requête finale est

IQueryable query = 
    from t1 in TABLE1.AsExpandable()
    where t1.TABLE2.Any(predicate.Compile()) //the problem should disappear
    select a;

Plus d'informations .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top