38 votes

Contournement de LinqToSQls "exception: les requêtes avec des collections locales ne sont pas prises en charge"

Donc, je suis en train de retourner un ensemble de Personnes dont l'ID est contenu dans un localement créé la collecte d'identifiants ( IQueryable)

Quand je précise "créés localement collection", je veux dire que l'Id de la collection n'en a pas provenir d'un LinqToSql requête et a été créé par programmation (basée sur la saisie de l'utilisateur). Ma requête ressemble à ceci:

var qry = from p in DBContext.People
                  where Ids.Contains(p.ID)
                  select p.ID;

Cela provoque l'exception suivante...

"les requêtes avec les collections ne sont pas pris en charge"

Comment puis-je trouver toutes les Personnes avec un id qui est contenu dans mon créés localement Id de collection?

Est-il possible à l'aide de LinqToSql?

40voto

KristoferA Points 8036

Si Ids est une liste, un tableau ou similaire, L2S se traduira par une contient.

Si Ids est un IQueryable, il suffit de le transformer en une liste avant de l’utiliser dans la requête. Par exemple:

 List<int> listOfIDs = IDs.ToList();  
var query =  
from st in dc.SomeTable  
where listOfIDs.Contains(st.ID)
select .....
 

35voto

maxlego Points 1945

Je me débattais aussi avec ce problème. Résolu mon problème en utilisant Any () à la place

 people.Where(x => ids.Any(id => id == x.ID))
 

0voto

Jason Sebring Points 4309

Je suis désolée, mais les réponses ne fonctionnent pas pour moi, car je fais des types dynamiques plus loin.

Ce que j'ai fait était d'utiliser "UNION" dans une boucle qui fonctionne très bien. Voici comment:

 var firstID = cityList.First().id;
var cities = dc.zs_Cities.Where(c => c.id == firstID);
foreach(var c in cityList)
{
  var tempCity = c;
  cities = cities.Union(dc.zs_Cities.Where(cty => cty.id == tempCity.id));
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X