我有一个名为“订阅”的表。我想将任何来自该表的LINQ选择重定向到Moles lambda,以便仅从该表返回3行-基本上我想绕过对数据库的调用。到目前为止,我拥有的代码如下所示:

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


不幸的是,它不起作用。我在数据库的Subscriptions表中大约有1000行。当我运行其中包含此重定向的一些测试代码时,我从数据库中获得了1000行,而不是redirect方法中的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; };


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

关于c# - 如何使用Moles通过LINQ从表中重定向选择?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4485502/

10-17 01:14