我如何使用Moles通过LINQ重定向表中的select?

问题描述:

我有一个叫做Subscriptions的表。我想将该表中的任何LINQ选择重定向到Moles lambda,以便该表只返回3行 - 基本上我想绕过对数据库的调用。到目前为止,我看起来像这样的代码:我如何使用Moles通过LINQ重定向表中的select?

// 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; 
    }; 

不幸的是,它不起作用。我在数据库的订阅表中有大约1000行。当我运行一些其中包含此重定向的测试代码时,我从数据库中获取1000行而不是重定向方法中的3行。显然我错过了一些东西。只要有任何测试代码从订阅中进行选择,我能做些什么来仅返回这3行?我有3个调用3个不同的表,他们都需要选择不在数据库中的数据才能使此测试正常工作。

澄清:当我选择from sub in dc.Subscriptions ...时,发生重定向方法的调用。但是返回的行不是重定向中的行。

看起来我正在做这个完全错误的。这是正确的方法:

// 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; }; 

使用此代码,从订阅表中的任何选择将只返回这三个记录。