Как я могу использовать родинки для перенаправления выбора из таблиц через LINQ?

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

  •  11-10-2019
  •  | 
  •  

Вопрос

У меня есть таблица под названием подписок. Я хотел бы перенаправить любой LINQ SELECT из этой таблицы на Lambda Moles, чтобы из этой таблицы возвращались только 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 звонка в 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