Opgave: Search, Filter and Sorting Items - using LINQ


I denne opgave tager vi udgangspunkt i eksemplet ItemsRazor ItemRazorV4.zip





Opgaven går ud på at, det skal være muligt at få Computer Items vist sorteret efter id (ved klik på tabelhovedet 'id'), efter name (ved klik på tabelhovedet 'Name') og efter price (ved klik på tabelhovedet 'Price').
Denne funktionalitet har du i opgaven SortItem implementeret vhj IComparable og ICompare. Du skal nu implementere den samme funktionalitet vha LINQ.


Step 1 (ItemService - SortById( )/SortByIdDescending( ))
Refaktorer metoden SortById i ItemService, så den i stedet for Sort( ) benytter LINQ. Lav en tilsvarende metode SortByIdDescending, der returnere listen sorteret i faldende orden.
Hint: orderby og descending;


Step 2 (GetAllItemsModel - OnGetSortById)
Opdater klassen GetAllItemsModel (razor page: GetAllItems) med metoden OnGetSortByIdDescending( ). Handler-metoden skal opdatere Items med en sorteret liste ved at kalde SortByIdDescending fra ItemService og returnere Page().

 

Step 3 (GetAllItems.html.cs)
Opdater hovedsiden GetAllItems, så det bliver muligt at kalde SortById( ) og SortByIdDescending( ) og få en visning af Computer Items sorteret efter Id i stigende og faldende orden.
Hint:

<th>
<div class="d-flex justify-content-between p-0">
<div><h5>Id </h5></div>
<div>
<a data-toggle="tooltip" title="Sort By Id" asp-page-handler="SortById"><i class="fa fa-angle-up"></i></a>
<a data-toggle="tooltip" title="Sort By Id Descending" asp-page-handler="SortByIdDescending"><i class="fa fa-angle-down"></i></a>
</div>
</div>
</th>


Step 4 (Afprøv)
Afprøv at refaktoreringen og den nye funktion virker.
Hint: Hvis den ikke virker er der nok en "stavefejl" - benyt evt Debugger ved at sætte et breakpoint ved SortById-metoderne (check om den bliver kaldt?)

Nu skal vi have de to andre sorterings funktioner refaktoreret, så de ikke benytter Comperatorer der implementere interfacet ICompare, men benytter LINQ.


Step 5 (SortByName)

Lav en tilsvarende refaktorering af SortByName, så der benyttes LINQ i stedet for Comperatorer.


Step 6 (Afprøv)
Afprøv at refaktoreringen og den nye funktion virker.


Step 7 (SortByPrice)
Lav en tilsvarende refaktorering af SortByPrice, så der benyttes LINQ i stedet for Comperatorer.


Step 8 (Afprøv)
Afprøv at refaktoreringen og den nye funktion virker.


Step 9 (Sort( ) VS. LINQ)
Diskuter hvad er den væsentligste forskel mellem at anvende Comperatorer og Sort( ) metoden samt at anvende LINQ?
Hint: Hvad sker der med den oprindelige collection?

I forrige opgave SearchFilterItemsLambda refaktorerede du Search og Filter handler-metoderne så de benyttede FindAll( ) og Lambda-expressions. Resten af denne opgave handler om af refaktorerer endnu engang til brug af LINQ


Step 10 (NameSearch)

Refaktorer NameSearch så den benytter LINQ i stedet for FindAll( ) med et Lambda-expressions som prædicat - function.

 

Step 11 (PriceFilter)
Refaktorer PriceFilter så den benytter LINQ i stedet for FindAll( ) med et Lambda-expressions som prædicat - function.

Step 12 (Afprøv)
Afprøv at refaktoreringen virker.


God fornøjelse!
Henrik Høltzer