0

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

一切都存储优秀的 int db。我将Conventions = FindTypeTagName ...商店文档添加为“事务/*”文档 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)中获取所有类型的事务作为 single IEnumerable<Transaction>。这太棒了。

但我想使用索引仅返回特定帐户的交易。因为ExchangeTransaction可以属于两个Accounts。我想看看ExchangeTransaction两者Accounts。我可以通过 AccId(索引字段)在 Raven Studio 中进行查询,而且效果很好!但我无法在代码中创建相同的请求:(。

有人能帮我吗?如何在 C# LINQ 查询中使用索引字段 AccId?

这段代码

var query = session.Query<Transaction, Account_Transactions>()

返回所有类型的事务,但我不知道如何按数据库中的索引字段过滤事务。

提前致谢。请对不起我的英语,它不是我的母语。

4

1 回答 1

2

我的错,在文档中一切都很清楚。我错过了一些有用的段落。

最简单的方法是编写一个像这样的多地图索引:

public class AnimalsIndex : AbstractMultiMapIndexCreationTask
{
    public AnimalsIndex()
    {
        AddMap<Cat>(cats => from c in cats
                            select new { c.Name });

        AddMap<Dog>(dogs => from d in dogs
                            select new { d.Name });
    }
}

并像这样查询它:

var results = session.Advanced.LuceneQuery<object>("AnimalsIndex")
    .WhereEquals("Name", "Mitzy");

>

就我而言,我应该使用下一个构造:

var transactions = session.Advanced.LuceneQuery<Transaction>( "Account/Transactions" )
                    .WhereEquals( "AccId", account2.Id )

现在一切正常。

于 2012-08-13T18:49:43.287 回答