I've searched the internet and every potential answer to my question is either not in C# or not available with my RavenDB version.
I want to do the simpliest inner join on 2 different document types. (I know it's a document based DB and not a relational one but I'm not responsible for the current modelisation)
Let's say I have these 2 different document types:
public class FirstDocumentType
{
public string Id { get; set; }
public string FirstDocumentTypeProperty { get; set; }
public string SecondDocumentTypeId { get; set; }
}
public class SecondDocumentType
{
public string Id { get; set; }
public string SecondDocumentProperty { get; set; }
}
I want an index that returns something like this:
public class IndexResult
{
public string FirstDocumentTypeId { get; set; }
public string SecondDocumentTypeId { get; set; }
public string FirstDocumentTypeProperty { get; set; }
public string SecondDocumentProperty { get; set; }
}
How do I do that with c#?
For RavenDB version 3.x prior to 3.5 I know it was possible to do that with a transform result within an Index constructor with something like this:
TransformResults =
(database, firstDocumentTypes) => from firstDocumentType in firstDocumentTypes
let secondDocumentType = database.Load<SecondDocumentType>(firstDocumentType.SecondDocumentTypeId)
select new
{
FirstDocumentTypeId = firstDocumentType.Id,
SecondDocumentTypeId = secondDocumentType.Id,
firstDocumentType.FirstDocumentTypeProperty,
secondDocumentType.SecondDocumentProperty
};
Now in version 3.5 the transformer needs to be in a class on it's own and I can't seem to find how to use the database to fetch the SecondDocumentType from it's id within the FirstDocumentType. The delegate function only takes 1 argument which is the document type.
EDIT: I've actually found my answer in the documentation https://ravendb.net/docs/article-page/3.5/csharp/transformers/loading-documents
I just have a hard time navigating in it...