我有一个名为Subscriptions的表。我想将该表中的任何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行而不是重定向方法中的3行。显然我错过了一些东西。如果任何测试代码从订阅中选择,我该怎么做才能返回仅这3行?我有3个调用3个不同的表,他们都需要选择不在数据库中的数据才能使这个测试工作。
澄清:当我进行from sub in dc.Subscriptions ...
选择时,会发生对重定向方法的调用。但返回的行不是重定向中的行。
答案 0 :(得分:3)
看起来我这样做完全错了。这是正确的方法:
// 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; };
使用此代码,Subscriptions表中的任何选择都将仅返回这三个记录。