comment puis-je utiliser pour rediriger Moles sélectionner des tables via LINQ?
Question
J'ai une table appelée Abonnements. Je voudrais rediriger tout LINQ sélectionner de cette table à un lambda Moles de sorte que seules trois lignes sont renvoyées de cette table - au fond, je veux contourner l'appel à la base de données. Jusqu'à présent, le code que j'ai ressemble à ceci:
// lazy loader is here to handle successive calls to the
// same table (otherwise there's an error)
// CM is a namespace alias
Table<CM.Subscriptions> subsTable = null;
MTheDataContext.AllInstances.SubscriptionsGet = (c) =>
{
if (subsTable == null)
{
subsTable = c.GetTable<CM.Subscriptions>();
subsTable.Attach(new CM.Subscriptions() { SubID = 1,
StatusCode = 1, CustomerID = custID1 });
subsTable.Attach(new CM.Subscriptions() { SubID = 2,
StatusCode = 1, CustomerID = custID2 });
subsTable.Attach(new CM.Subscriptions() { SubID = 3,
StatusCode = 4, CustomerID = custID3 });
// c.Refresh(RefreshMode.KeepCurrentValues, t);
}
return subsTable;
};
Malheureusement, il ne fonctionne pas. J'ai environ 1000 lignes dans la table Abonnements dans la base de données. Quand je lance un code de test qui a cette redirection en elle, je reçois les 1000 lignes de la base de données au lieu des 3 lignes qui sont dans la méthode de redirection. Il est clair que je manque quelque chose. Que puis-je faire pour revenir seulement ces 3 rangs chaque fois un code de test sélectionne des abonnements? J'ai 3 appels à 3 tables différentes et ils ont tous besoin de sélectionner les données qui ne sont pas dans la db pour obtenir ce test au travail.
Précision: l'appel à la méthode redirigée ne se produit quand je fais un from sub in dc.Subscriptions ...
sélectionner. Mais les lignes renvoyées ne sont pas les lignes qui sont dans la redirection.
La solution
On dirait que je faisais cela complètement faux. Telle est l'approche correcte:
// using System.Data.Linq.Moles;
// CM is a namespace alias
var subsList = new List<CM.Subscription>{
new CM.Subscription() { SubscriptionID = subId1 },
new CM.Subscription() { SubscriptionID = subId2 },
new CM.Subscription() { SubscriptionID = subId3 }};
var subsTable = new MTable<CM.Subscription>();
subsTable.Bind(subsList.AsQueryable());
MTheDataContext.AllInstances.SubscriptionGet = (c) => { return subsTable; };
Avec ce code, toute sélection de la table Abonnements retournera ces trois dossiers seulement.