I'm working on a registry of people using MongoDB, C# dotnet and Linq for searches. This record has an array of the person's addresses, and I need to make a query by zip code that returns all the records that have the same zip code as the one searched for.
This is my class
public class Retailer : Entity<Retailer>
{
public PersonType PersonType { get; private set; }
public string CompanyName { get; private set; }
public string TradingName { get; private set; }
public IReadOnlyCollection<RetailerAddress> Adresses
{
get { return _adressesList.ToArray(); }
set { _adressesList = value.ToList(); }
}
.
.
.
Other methods omitted for brevity
.
.
.
}
This is the object persisted in MongoDB
{
"_id": "58beb0c5-950d-443b-943d-1580a5dfa223",
"createdDate": "2022-07-13T17:27:50.7567299-03:00",
"active": true,
"PersonType": "PJ",
"CompanyName": "Rotisseria Coma e Viva",
"TradingName": "Coma e viva",
"Adresses": [
{
"_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"createdDate": "2022-07-13T17:27:50.745713-03:00",
"active": true,
"RetailerId": "58beb0c5-950d-443b-943d-1580a5dfa223",
"Street": "Av Principal",
"Number": "395",
"Neighborhood": "Vila Soco",
"Complement": "Em Frente A Farmácia",
"City": "Santo André",
"ZipCode": "09190000",
"IbgeCityCode": "3547809",
"State": "SP",
"Country": "BR"
},
{
"_id": "3fa85f64-5717-4562-b3fc-2c963f66afa7",
"createdDate": "2022-07-13T17:27:50.745713-03:00",
"active": false,
"RetailerId": "58beb0c5-950d-443b-943d-1580a5dfa223",
"Street": "Av Secondary",
"Number": "395",
"Neighborhood": "Vila Country",
"Complement": "Ao lado do posto de gasolina",
"City": "Pirapora",
"ZipCode": "09190000",
"IbgeCityCode": "3547809",
"State": "SP",
"Country": "BR"
}
]
}
I want to get all people who are Active and who also have an Active address and a zip code equal to 09190000. I tried using a linq expression like this:
var result = await _retailerRepository.GetAsync(retailer => retailer.Active && retailer.Adresses.Where(address => address.ZipCode == zipCode));
But I get this error message: Operator '&&' cannot be applied to operands of type 'bool' and and 'IEnumerable'
How should I correct this message and return all records that contain the searched zip code?
CodePudding user response:
var result = await _retailerRepository.GetAsync(retailer => retailer.Active && retailer.Adresses.Any(address => address.ZipCode == zipCode));