私はRaveDBを初めて使用します(実際、私は昨日だけそれを学び始めました)。そして、いくつかの機能を実装してみてください。
次のクラス階層を作成しましょう。
public abstract class Transaction
{
public string Id { get; set; }
}
public class CategoryTransaction : Transaction
{
public string AccountId { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public decimal Amount { get; set; }
}
public class ExchangeTransaction : Transaction
{
public string DebitAccountId { get; set; }
public string CreditAccountId { get; set; }
public decimal DebitAmount { get; set; }
public decimal CreditAmount { get; set; }
}
優れたintdbを格納するすべて。Conventions = FindTypeTagName ...
ストアドキュメントのイベントを「transactions/*」ドキュメントIDとして追加します。
しかし、特定のアカウントのすべてのトランザクションを選択するためのインデックスを作成したいと思います(フィールドAccountIdによる)。インデックスを作成しました:
public class AccountTransactionResult
{
public string AccId { get; set; }
}
public class Account_Transactions : AbstractMultiMapIndexCreationTask<AccountTransactionResult>
{
public Account_Transactions()
{
this.AddMap<CategoryTransaction>( transactions => from transaction in transactions
select new
{
AccId = transaction.AccountId
} );
this.AddMap<ExchangeTransaction>( transactions => from transaction in transactions
select new
{
AccId = transaction.DebitAccountId
} );
this.AddMap<ExchangeTransaction>( transactions => from transaction in transactions
select new
{
AccId = transaction.CreditAccountId
} );
}
}
このインデックスはうまく機能します。DB(ExchangeおよびCategory)からすべてのタイプのトランザクションを単一として取得することはできませんIEnumerable<Transaction>
。それは素晴らしい。
ただし、インデックスを使用して、特定のアカウントのトランザクションのみを返したいと思います。ExchangeTransaction
2つに属することができるのでAccounts
。ExchangeTransaction
両方見たいですAccounts
。Raven StudioでAccId(インデックスフィールド)を使用してクエリを実行できます。しかし、コードで同じリクエストを作成することはできません:(。
誰かが私を助けることができますか?C#LINQクエリでインデックスフィールドAccIdを使用するにはどうすればよいですか?
このコード
var query = session.Query<Transaction, Account_Transactions>()
すべてのタイプのトランザクションを返しますが、DBのインデックスフィールドでトランザクションをフィルタリングする方法はありません。
前もって感謝します。そして、私の英語をごめんなさい、それは私の母国語ではありません。