using MongoDB.Driver; using System.Configuration; using System.Linq.Expressions; 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 []; else return await results.ToListAsync(); } } public class MongoDbContext { public readonly MongoClient Client; private readonly IMongoDatabase db; public MongoDbContext(string name) { Client = new(ConfigurationManager.ConnectionStrings[name].ConnectionString); db = Client.GetDatabase(name); } public IMongoCollection Table() => db.GetCollection($"{typeof(T).Name}Table"); }