using MongoDB.Driver; using System; using System.Collections.Generic; using System.Configuration; using System.Linq.Expressions; using System.Threading.Tasks; namespace MongoDb.Extensions { public static class LinqExtensions { public static IFindFluent Where(this IMongoCollection collection, Expression> filter) { return collection.Find(filter); } public static T FirstOrDefault(this IMongoCollection collection, Expression> filter) { var results = collection.Find(filter); return results.FirstOrDefault(); } public async static Task FirstOrDefaultAsync(this IMongoCollection collection, Expression> filter) { var results = await collection.FindAsync(filter); if (results == null) return default; else return await results.FirstOrDefaultAsync(); } public async static Task> ToListAsync(this IMongoCollection collection, Expression> filter) { var results = await collection.FindAsync(filter); if (results == null) return new List(); else return await results.ToListAsync(); } } public class MongoDbContext { public readonly MongoClient Client; private readonly IMongoDatabase db; public MongoDbContext(string name) { Client = new MongoClient(ConfigurationManager.ConnectionStrings[name].ConnectionString); db = Client.GetDatabase(name); } public IMongoCollection Table() => db.GetCollection($"{typeof(T).Name}Table"); } }