2010-03-08 12 views
0

Je veux faire une sélection personnalisée à partir de la table de base de données en utilisant Linq. Nous utilisons LLBGEN comme solution ORM.LLBLGEN: Linq à LLBGEN ne fonctionnent pas

Je ne peux pas interroger LINQ sur Entities Collection Class à moins que j'appelle la méthode GetMulti (null).

Est-il possible de faire une requête LINQ à LLBGEN sans extraire tout d'abord la table?

BatchCollection batches = new BatchCollection();     
BatchEntity batch = batches.AsQueryable() 
.Where(i => i.RegisterID == 3) 
.FirstOrDefault(); // Exception: Sequence don't contains any elements 

batches = new BatchCollection();     
batches.GetMulti(null); // I don't want to extract the whole table. 
BatchEntity batch = batches.AsQueryable() 
.Where(i => i.RegisterID == 3) 
.FirstOrDefault(); //Works fine 

Répondre

4

Pour interroger la base de données en utilisant LINQ (qui est différent de fonctionner sur une collection dénombrable en utilisant la syntaxe LINQ) vous devez utiliser le fournisseur de LinqMetaData qui vient avec LLBLGen dans l'assemblée yourrootnamespace.Linq. Une fois que vous ajoutez cette assemblée à votre projet, vous pouvez utiliser quelque chose comme ceci pour créer votre requête db: (à partir de la documentation LLBL)

LinqMetaData metaData = new LinqMetaData(); 
var q = from c in metaData.Customer 
     where c.Country=="USA" 
     select c; 

Dans votre exemple ci-dessus, vous utilisez la syntaxe LINQ pour effectuer une clause where sur une collection , mais cela n'a rien à voir avec LLBL ou l'exécution d'une requête sur la base de données. C'est pourquoi cela ne fonctionnera pas avec la collection vide, mais fonctionne sur la collection remplie.

Regardez plus dans LinqMetaData pour les spécificités de l'interrogation de votre base de données en utilisant LINQ to LLBLGen.