comment puis-je utiliser pour rediriger Moles sélectionner des tables via LINQ?

StackOverflow https://stackoverflow.com/questions/4485502

  •  11-10-2019
  •  | 
  •  

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.

Était-ce utile?

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.

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