All drivers are slated to have some form of helper method for aggregation in the future. But aggregations are just commands, and you can write them yourself with the current version of the C# driver using RunCommand.
Your sample aggregation command is really just a shortcut for:
> db.runCommand({aggregate:"orders", pipeline:[{$group:{_id:"$cust_id",total:{$sum:"$price"}}}]})
Which you can write in C# as:
var pipeline = new BsonArray
{
new BsonDocument { { "$group", new BsonDocument { { "_id", "$cust_id" }, { "total", new BsonDocument { { "$sum", "$price" } } } } } }
};
var aggregationCommand = new CommandDocument
{
{ "aggregate", "orders" },
{ "pipeline", pipeline }
};
var commandResult = database.RunCommand(aggregationCommand);
var results = commandResult.Response["result"].AsBsonArray;
foreach (BsonDocument document in results)
{
// process result
}