2010-12-19 13 views
3

Subscription이라는 테이블이 있습니다. 해당 테이블에서 LINQ 선택을 Moles 람다로 리디렉션하여 해당 테이블에서 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; 
    }; 

불행히도 작동하지 않습니다. 데이터베이스의 Subscriptions 테이블에 약 1000 개의 행이 있습니다. 이 리디렉션이 포함 된 테스트 코드를 실행하면 리디렉션 메서드에있는 3 개의 행 대신 데이터베이스에서 1000 개의 행이 표시됩니다. 분명히 나는 ​​뭔가를 놓치고있다. 어떤 테스트 코드가 구독에서 선택할 때마다 을이 3 행 만 반환하려면 어떻게해야합니까? 나는 3 개의 다른 테이블에 3 개의 호출을 받았고, 모두이 테스트가 작동하도록 db에없는 데이터를 선택해야합니다.

설명 : from sub in dc.Subscriptions ... select를 수행하면 리디렉션 된 메서드에 대한 호출이 발생합니다. 그러나 반환 된 행은 리디렉션에있는 행이 아닙니다.

답변

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

이 코드로, 구독 테이블에서 모든 선택은이 세 가지 레코드를 반환합니다.

관련 문제