je dois faire la chose suivante:LINQ to SQL: faire une plante "double IN" requête
var a = from c in DB.Customers
where (from t1 in DB.Table1 where t1.Date >= DataTime.Now
select t1.ID).Contains(c.ID) &&
(from t2 in DB.Table2 where t2.Date >= DataTime.Now
select t2.ID).Contains(c.ID)
select c
Il ne veut pas courir. Je reçois l'erreur suivante:
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Mais lorsque je tente de courir:
var a = from c in DB.Customers
where (from t1 in DB.Table1 where t1.Date >= DataTime.Now
select t1.ID).Contains(c.ID)
select c
Ou:
var a = from c in DB.Customers
where (from t2 in DB.Table2 where t2.Date >= DataTime.Now
select t2.ID).Contains(c.ID)
select c
Il fonctionne! Je suis sûr que les deux requêtes IN contiennent des identifiants de clients.
Je ne connaissais pas cette façon simple de déboguer LINQ to SQL! Je vous remercie. Il crée des requêtes EXISTS, et encore une fois, en prenant trop à charger. Si je n'utilise qu'un EXISTS, cela fonctionne. Je vais essayer de trouver où le problème est, ou utiliser des requêtes JOIN. Y a-t-il un moyen de faire en sorte qu'il utilise la requête IN au lieu de la requête EXISTS? – Alex
J'ai trouvé le problème. C'est dans mon ordre NEWID() par méthode, parce que je veux obtenir des résultats aléatoires. Quand je l'enlève, ça fonctionne bien. Comment puis-je utiliser NEWID()? – Alex