我有一个名为订阅的表。我想将任何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;
    };

不幸的是,它行不通。我在数据库中的订阅表中大约有1000行。当我运行一些重定向的测试代码时,我从数据库中获得1000行,而不是重定向方法中的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; };

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top