mfenniak / rethinkdb-net

A C# / .NET client driver for RethinkDB.
Other
247 stars 37 forks source link

EgJoin #239

Closed erik-kle closed 8 years ago

erik-kle commented 8 years ago

I have problem with getting an EqJoin to work in C#. Is there someone who can show me the correct syntax that I should use?

karlgrz commented 8 years ago

Hey @erik-kle, I'd be happy to try to help you out!

What exactly are you trying to do? There is some documentation here that shows quite a bit of how to use the driver:

https://github.com/mfenniak/rethinkdb-net/blob/master/rethinkdb-net-test/Integration/Documentation/TenMinuteGuide.cs

erik-kle commented 8 years ago

Thanks in advance @karlgrz :)

Im just trying to join TableA with TableB using EqJoin. Im really new to rethinkdb, but more used to sql. So im trying to achive a simple inner join but dont really understand what the syntax should look like.

Db.Table("TableA").EgJoin is what i have, the rest i dont know.

erik-kle commented 8 years ago

I know that the syntax looks like this in rethink, and it works. But i dont know how to translate this into c# r.db('db').table("tablea").eqJoin("Id", r.db('db').table('tableb'))

mfenniak commented 8 years ago

You start by defining the object schemas that you'd like to see from the C# side:

[DataContract]
class User
{
    [DataMember]
    int userId;
    [DataMember]
    string name;
}

[DataContract]
class Office
{
    [DataMember]
    int officeId;
    [DataMember]
    int userId;
}

Then you tell rethinkdb-net about your two RethinkDB tables, and that they map to those two objects:

var myDb = Query.Db("my-database-name");
var userTable = myDb.Table<User>("user");
var officeTable = myDb.Table<Office>("office");

And then performing an EqJoin is done like this:

var query = userTable.EqJoin(user => user.userId, officeTable);
foreach (var record in connection.Run(query)) {
...
}

The expression user => user.userId is telling the EqJoin what field to join on, and then the officeTable reference is what table to join to userTable. The variable record will be of type Tuple<User, Office>. You can access the user with record.Item1, and the joined office with record.Item2.

erik-kle commented 8 years ago

Thank you @mfenniak. It works :)