顧客が指定した特定の基準に基づいて結果を返すことができるメソッドがクラスにあります。このメソッドは、顧客がフロントエンドで指定したものを、データベースから取得したコレクション内の各アイテムと照合します。顧客がどの属性も指定しない場合、属性のIDは0に等しいメソッドに渡されます(データベースには、1でシードされ、増分であるすべてのテーブルのIDがあります)。この場合、その属性は無視する必要があります。たとえば、顧客が場所を指定しない場合、customerSearchCriteria.LocationID=0がメソッドに入ります。次に、一致は他の属性と一致し、他の属性に一致するすべての場所を返します(以下の例)。
public IEnumerable<Pet> FindPetsMatchingCustomerCriteria(CustomerPetSearchCriteria customerSearchCriteria)
{
if(customerSearchCriteria.LocationID == 0)
{
return repository.GetAllPetsLinkedCriteria()
.Where(x => x.TypeID == customerSearchCriteria.TypeID &&
x.FeedingMethodID == customerSearchCriteria.FeedingMethodID &&
x.FlyAblityID == customerSearchCriteria.FlyAblityID )
.Select(y => y.Pet);
}
}
すべての基準が指定されている場合のコードを以下に示します。
private PetsRepository repository = new PetsRepository();
public IEnumerable<Pet> FindPetsMatchingCustomerCriteria(CustomerPetSearchCriteria customerSearchCriteria)
{
return repository.GetAllPetsLinkedCriteria()
.Where(x => x.TypeID == customerSearchCriteria.TypeID &&
x.FeedingMethodID == customerSearchCriteria.FeedingMethodID &&
x.FlyAblityID == customerSearchCriteria.FlyAblityID &&
x.LocationID == customerSearchCriteria.LocationID )
.Select(y => y.Pet);
}
顧客が探している結果の属性を明示的に選択しないたびに対応するifおよびelseステートメントのセット全体を避けたいと思います。これを達成するための最も簡潔で効率的な方法は何ですか?