50 lines
1.4 KiB
C#
50 lines
1.4 KiB
C#
using GerstITS.Common;
|
|
using GerstITS.Data;
|
|
using GerstITS.Examples.Data.Entities;
|
|
using GerstITS.Search;
|
|
|
|
namespace GerstITS.Examples.Logic.Customers.Search;
|
|
|
|
internal sealed class CustomerSearchQueryBuilderRule : SearchQueryBuilderRuleBase<Customer, CustomerSearchFilter>
|
|
{
|
|
#region Fields
|
|
|
|
private readonly IReadOnlyRepository _repository;
|
|
|
|
#endregion
|
|
|
|
#region Constructors
|
|
|
|
public CustomerSearchQueryBuilderRule(IReadOnlyRepository repository)
|
|
{
|
|
_repository = repository;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Methods
|
|
|
|
protected override IQueryable<Customer> CreateQuery(CustomerSearchFilter filter)
|
|
{
|
|
var query = _repository.Query<CustomerEntity>();
|
|
|
|
if (filter.Name.IsNotNullOrWhiteSpace())
|
|
query = query.Where(i => i.FirstName.Contains(filter.Name)
|
|
|| i.LastName.Contains(filter.Name));
|
|
|
|
if (filter.EMail.IsNotNullOrWhiteSpace())
|
|
query = query.Where(i => i.EMail == filter.EMail);
|
|
|
|
return query.Project(x => new Customer
|
|
{
|
|
Id = x.Id,
|
|
FirstName = x.FirstName,
|
|
LastName = x.LastName,
|
|
EMail = x.EMail,
|
|
IsActive = x.IsActive
|
|
});
|
|
}
|
|
|
|
#endregion
|
|
}
|