public static void Main()
Console.WriteLine("Hello World");
public interface IGetQuery<T> : IRequest<T> where T : Model, new()
public class GetQuery<T> : IGetQuery<T> where T : Model, new()
public int Id { get; set; }
internal class GetQueryHandler<TEntity, TModel> : IRequestHandler<GetQuery<TModel>, TModel>
where TModel : Model, new()
private readonly IRepository<TEntity> _repository;
private readonly IMapper _mapper;
public GetQueryHandler(IRepository<TEntity> repository, IMapper mapper)
_repository = repository;
public async Task<TModel> Handle(GetQuery<TModel> request, CancellationToken cancellationToken)
var entity = await _repository.Get(request.Id);
return _mapper.Map<TModel>(entity);
namespace mPower.Domain.Items
public class Item : Entity
public int Id { get; set; }
public string Name { get; set; }
public class EmployeeSpec : ISpecification<Employee>
public EmployeeSpec(int id) : base()
public List<int> Ids { get; set; }
public string Name { get; set; }
public int? Id { get; set; }
public Expression<Func<Employee, bool>> Criteria
var searchStrings = Name.Split(new[] { " ", "%" }, StringSplitOptions.RemoveEmptyEntries);
Expression<Func<Employee, bool>> expression;
expression = e => (Name == null || searchStrings.Contains(e.FirstName + e.LastName)) &&
(Ids.Count == 0 || Ids.Contains(e.Id)) &&
(Id == null || Id == e.Id);
return Ids.Count != 0 || Name != null || Id != null;