Molesを使用して、LINQ経由のテーブルから選択をリダイレクトするにはどうすればよいですか?

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

  •  11-10-2019
  •  | 
  •  

質問

サブスクリプションというテーブルがあります。そのテーブルからlinq selectをモルラムダにリダイレクトして、そのテーブルから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行があります。このリダイレクトがあるテストコードを実行すると、リダイレクトメソッドの3行ではなく、データベースから1000行を取得します。明らかに私は何かが足りません。戻るために何ができますか これらの3列のみ サブスクリプションからテストコードが選択されるたびに? 3つの異なるテーブルへの3つの呼び出しがあり、これらはすべて、このテストを機能させるためにDBにないデータを選択する必要があります。

明確化:リダイレクトされた方法への呼び出しは、私がするときに起こります 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; };

このコードを使用すると、サブスクリプションテーブルからの選択はこれら3つのレコードのみを返します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top