Skip to content

Commit 009cb1a

Browse files
authored
Add BlazorWASMExample (.NET 5.0) (#505)
1 parent d2530cf commit 009cb1a

32 files changed

+2635
-55
lines changed

System.Linq.Dynamic.Core.sln

Lines changed: 53 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestSLDC.Android", "test-xa
106106
EndProject
107107
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExpressionSample.Android", "test-xamarin\ExpressionSample\ExpressionSample.Android\ExpressionSample.Android.csproj", "{CE0965F5-C4DD-4CAB-94C6-FE260775D2B3}"
108108
EndProject
109+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlazorWASMExample", "src-blazor\BlazorWASMExample\BlazorWASMExample.csproj", "{3DA1CE3B-D1FB-4CEC-A4A6-22495CC36655}"
110+
EndProject
109111
Global
110112
GlobalSection(SolutionConfigurationPlatforms) = preSolution
111113
Debug|Any CPU = Debug|Any CPU
@@ -324,26 +326,6 @@ Global
324326
{F1880F07-238F-4A3A-9E58-141350665E1F}.Release|x64.Build.0 = Release|Any CPU
325327
{F1880F07-238F-4A3A-9E58-141350665E1F}.Release|x86.ActiveCfg = Release|Any CPU
326328
{F1880F07-238F-4A3A-9E58-141350665E1F}.Release|x86.Build.0 = Release|Any CPU
327-
{926D446C-8358-465A-AFAC-2F9078C22262}.Debug|Any CPU.ActiveCfg = Debug|x86
328-
{926D446C-8358-465A-AFAC-2F9078C22262}.Debug|ARM.ActiveCfg = Debug|ARM
329-
{926D446C-8358-465A-AFAC-2F9078C22262}.Debug|ARM.Build.0 = Debug|ARM
330-
{926D446C-8358-465A-AFAC-2F9078C22262}.Debug|ARM.Deploy.0 = Debug|ARM
331-
{926D446C-8358-465A-AFAC-2F9078C22262}.Debug|x64.ActiveCfg = Debug|x64
332-
{926D446C-8358-465A-AFAC-2F9078C22262}.Debug|x64.Build.0 = Debug|x64
333-
{926D446C-8358-465A-AFAC-2F9078C22262}.Debug|x64.Deploy.0 = Debug|x64
334-
{926D446C-8358-465A-AFAC-2F9078C22262}.Debug|x86.ActiveCfg = Debug|x86
335-
{926D446C-8358-465A-AFAC-2F9078C22262}.Debug|x86.Build.0 = Debug|x86
336-
{926D446C-8358-465A-AFAC-2F9078C22262}.Debug|x86.Deploy.0 = Debug|x86
337-
{926D446C-8358-465A-AFAC-2F9078C22262}.Release|Any CPU.ActiveCfg = Release|x86
338-
{926D446C-8358-465A-AFAC-2F9078C22262}.Release|ARM.ActiveCfg = Release|ARM
339-
{926D446C-8358-465A-AFAC-2F9078C22262}.Release|ARM.Build.0 = Release|ARM
340-
{926D446C-8358-465A-AFAC-2F9078C22262}.Release|ARM.Deploy.0 = Release|ARM
341-
{926D446C-8358-465A-AFAC-2F9078C22262}.Release|x64.ActiveCfg = Release|x64
342-
{926D446C-8358-465A-AFAC-2F9078C22262}.Release|x64.Build.0 = Release|x64
343-
{926D446C-8358-465A-AFAC-2F9078C22262}.Release|x64.Deploy.0 = Release|x64
344-
{926D446C-8358-465A-AFAC-2F9078C22262}.Release|x86.ActiveCfg = Release|x86
345-
{926D446C-8358-465A-AFAC-2F9078C22262}.Release|x86.Build.0 = Release|x86
346-
{926D446C-8358-465A-AFAC-2F9078C22262}.Release|x86.Deploy.0 = Release|x86
347329
{E9C52E5E-28DC-4D45-B9AB-1B2CF2924A84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
348330
{E9C52E5E-28DC-4D45-B9AB-1B2CF2924A84}.Debug|Any CPU.Build.0 = Debug|Any CPU
349331
{E9C52E5E-28DC-4D45-B9AB-1B2CF2924A84}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -588,6 +570,38 @@ Global
588570
{C530A693-66FD-48A9-B42A-D613BB4CB754}.Release|x64.Build.0 = Release|Any CPU
589571
{C530A693-66FD-48A9-B42A-D613BB4CB754}.Release|x86.ActiveCfg = Release|Any CPU
590572
{C530A693-66FD-48A9-B42A-D613BB4CB754}.Release|x86.Build.0 = Release|Any CPU
573+
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
574+
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Debug|Any CPU.Build.0 = Debug|Any CPU
575+
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Debug|ARM.ActiveCfg = Debug|Any CPU
576+
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Debug|ARM.Build.0 = Debug|Any CPU
577+
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Debug|x64.ActiveCfg = Debug|Any CPU
578+
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Debug|x64.Build.0 = Debug|Any CPU
579+
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Debug|x86.ActiveCfg = Debug|Any CPU
580+
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Debug|x86.Build.0 = Debug|Any CPU
581+
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Release|Any CPU.ActiveCfg = Release|Any CPU
582+
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Release|Any CPU.Build.0 = Release|Any CPU
583+
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Release|ARM.ActiveCfg = Release|Any CPU
584+
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Release|ARM.Build.0 = Release|Any CPU
585+
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Release|x64.ActiveCfg = Release|Any CPU
586+
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Release|x64.Build.0 = Release|Any CPU
587+
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Release|x86.ActiveCfg = Release|Any CPU
588+
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Release|x86.Build.0 = Release|Any CPU
589+
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
590+
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Debug|Any CPU.Build.0 = Debug|Any CPU
591+
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Debug|ARM.ActiveCfg = Debug|Any CPU
592+
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Debug|ARM.Build.0 = Debug|Any CPU
593+
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Debug|x64.ActiveCfg = Debug|Any CPU
594+
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Debug|x64.Build.0 = Debug|Any CPU
595+
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Debug|x86.ActiveCfg = Debug|Any CPU
596+
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Debug|x86.Build.0 = Debug|Any CPU
597+
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Release|Any CPU.ActiveCfg = Release|Any CPU
598+
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Release|Any CPU.Build.0 = Release|Any CPU
599+
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Release|ARM.ActiveCfg = Release|Any CPU
600+
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Release|ARM.Build.0 = Release|Any CPU
601+
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Release|x64.ActiveCfg = Release|Any CPU
602+
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Release|x64.Build.0 = Release|Any CPU
603+
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Release|x86.ActiveCfg = Release|Any CPU
604+
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Release|x86.Build.0 = Release|Any CPU
591605
{85D70423-5800-41E9-B7D5-244AAF051A85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
592606
{85D70423-5800-41E9-B7D5-244AAF051A85}.Debug|Any CPU.Build.0 = Debug|Any CPU
593607
{85D70423-5800-41E9-B7D5-244AAF051A85}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
@@ -636,38 +650,22 @@ Global
636650
{CE0965F5-C4DD-4CAB-94C6-FE260775D2B3}.Release|x86.ActiveCfg = Release|Any CPU
637651
{CE0965F5-C4DD-4CAB-94C6-FE260775D2B3}.Release|x86.Build.0 = Release|Any CPU
638652
{CE0965F5-C4DD-4CAB-94C6-FE260775D2B3}.Release|x86.Deploy.0 = Release|Any CPU
639-
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
640-
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Debug|Any CPU.Build.0 = Debug|Any CPU
641-
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Debug|ARM.ActiveCfg = Debug|Any CPU
642-
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Debug|ARM.Build.0 = Debug|Any CPU
643-
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Debug|x64.ActiveCfg = Debug|Any CPU
644-
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Debug|x64.Build.0 = Debug|Any CPU
645-
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Debug|x86.ActiveCfg = Debug|Any CPU
646-
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Debug|x86.Build.0 = Debug|Any CPU
647-
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Release|Any CPU.ActiveCfg = Release|Any CPU
648-
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Release|Any CPU.Build.0 = Release|Any CPU
649-
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Release|ARM.ActiveCfg = Release|Any CPU
650-
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Release|ARM.Build.0 = Release|Any CPU
651-
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Release|x64.ActiveCfg = Release|Any CPU
652-
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Release|x64.Build.0 = Release|Any CPU
653-
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Release|x86.ActiveCfg = Release|Any CPU
654-
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC}.Release|x86.Build.0 = Release|Any CPU
655-
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
656-
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Debug|Any CPU.Build.0 = Debug|Any CPU
657-
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Debug|ARM.ActiveCfg = Debug|Any CPU
658-
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Debug|ARM.Build.0 = Debug|Any CPU
659-
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Debug|x64.ActiveCfg = Debug|Any CPU
660-
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Debug|x64.Build.0 = Debug|Any CPU
661-
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Debug|x86.ActiveCfg = Debug|Any CPU
662-
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Debug|x86.Build.0 = Debug|Any CPU
663-
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Release|Any CPU.ActiveCfg = Release|Any CPU
664-
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Release|Any CPU.Build.0 = Release|Any CPU
665-
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Release|ARM.ActiveCfg = Release|Any CPU
666-
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Release|ARM.Build.0 = Release|Any CPU
667-
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Release|x64.ActiveCfg = Release|Any CPU
668-
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Release|x64.Build.0 = Release|Any CPU
669-
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Release|x86.ActiveCfg = Release|Any CPU
670-
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8}.Release|x86.Build.0 = Release|Any CPU
653+
{3DA1CE3B-D1FB-4CEC-A4A6-22495CC36655}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
654+
{3DA1CE3B-D1FB-4CEC-A4A6-22495CC36655}.Debug|Any CPU.Build.0 = Debug|Any CPU
655+
{3DA1CE3B-D1FB-4CEC-A4A6-22495CC36655}.Debug|ARM.ActiveCfg = Debug|Any CPU
656+
{3DA1CE3B-D1FB-4CEC-A4A6-22495CC36655}.Debug|ARM.Build.0 = Debug|Any CPU
657+
{3DA1CE3B-D1FB-4CEC-A4A6-22495CC36655}.Debug|x64.ActiveCfg = Debug|Any CPU
658+
{3DA1CE3B-D1FB-4CEC-A4A6-22495CC36655}.Debug|x64.Build.0 = Debug|Any CPU
659+
{3DA1CE3B-D1FB-4CEC-A4A6-22495CC36655}.Debug|x86.ActiveCfg = Debug|Any CPU
660+
{3DA1CE3B-D1FB-4CEC-A4A6-22495CC36655}.Debug|x86.Build.0 = Debug|Any CPU
661+
{3DA1CE3B-D1FB-4CEC-A4A6-22495CC36655}.Release|Any CPU.ActiveCfg = Release|Any CPU
662+
{3DA1CE3B-D1FB-4CEC-A4A6-22495CC36655}.Release|Any CPU.Build.0 = Release|Any CPU
663+
{3DA1CE3B-D1FB-4CEC-A4A6-22495CC36655}.Release|ARM.ActiveCfg = Release|Any CPU
664+
{3DA1CE3B-D1FB-4CEC-A4A6-22495CC36655}.Release|ARM.Build.0 = Release|Any CPU
665+
{3DA1CE3B-D1FB-4CEC-A4A6-22495CC36655}.Release|x64.ActiveCfg = Release|Any CPU
666+
{3DA1CE3B-D1FB-4CEC-A4A6-22495CC36655}.Release|x64.Build.0 = Release|Any CPU
667+
{3DA1CE3B-D1FB-4CEC-A4A6-22495CC36655}.Release|x86.ActiveCfg = Release|Any CPU
668+
{3DA1CE3B-D1FB-4CEC-A4A6-22495CC36655}.Release|x86.Build.0 = Release|Any CPU
671669
EndGlobalSection
672670
GlobalSection(SolutionProperties) = preSolution
673671
HideSolutionNode = FALSE
@@ -686,7 +684,6 @@ Global
686684
{437473EE-7FBB-4C28-96EC-41E1AEE161F3} = {7971CAEB-B9F2-416B-966D-2D697C4C1E62}
687685
{EDF434F6-70C0-4005-B63E-0C365B3DA42A} = {7971CAEB-B9F2-416B-966D-2D697C4C1E62}
688686
{F1880F07-238F-4A3A-9E58-141350665E1F} = {7971CAEB-B9F2-416B-966D-2D697C4C1E62}
689-
{926D446C-8358-465A-AFAC-2F9078C22262} = {ECA5702B-5D32-4888-A34E-9461FC533F23}
690687
{E9C52E5E-28DC-4D45-B9AB-1B2CF2924A84} = {7971CAEB-B9F2-416B-966D-2D697C4C1E62}
691688
{36B101B1-720B-4770-B222-C6ADD464F9EC} = {7971CAEB-B9F2-416B-966D-2D697C4C1E62}
692689
{D3804228-91F4-4502-9595-39584EA20000} = {DBD7D9B6-FCC7-4650-91AF-E6457573A68F}
@@ -702,10 +699,11 @@ Global
702699
{060F5395-623F-464F-9C84-120E9496CBBA} = {ECA5702B-5D32-4888-A34E-9461FC533F23}
703700
{C7020A29-724F-40D3-9493-E6E9C018DE57} = {ECA5702B-5D32-4888-A34E-9461FC533F23}
704701
{C530A693-66FD-48A9-B42A-D613BB4CB754} = {ECA5702B-5D32-4888-A34E-9461FC533F23}
705-
{85D70423-5800-41E9-B7D5-244AAF051A85} = {ECA5702B-5D32-4888-A34E-9461FC533F23}
706-
{CE0965F5-C4DD-4CAB-94C6-FE260775D2B3} = {ECA5702B-5D32-4888-A34E-9461FC533F23}
707702
{1D30F4EB-3CD9-446C-BDFB-107F79F05BBC} = {7971CAEB-B9F2-416B-966D-2D697C4C1E62}
708703
{38FDDF50-5F86-4B6D-9062-F687C6FD41A8} = {7971CAEB-B9F2-416B-966D-2D697C4C1E62}
704+
{85D70423-5800-41E9-B7D5-244AAF051A85} = {ECA5702B-5D32-4888-A34E-9461FC533F23}
705+
{CE0965F5-C4DD-4CAB-94C6-FE260775D2B3} = {ECA5702B-5D32-4888-A34E-9461FC533F23}
706+
{3DA1CE3B-D1FB-4CEC-A4A6-22495CC36655} = {122BC4FA-7563-4E35-9D17-077F16F1629F}
709707
EndGlobalSection
710708
GlobalSection(ExtensibilityGlobals) = postSolution
711709
SolutionGuid = {94C56722-194E-4B8B-BC23-B3F754E89A20}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
2+
<Found Context="routeData">
3+
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
4+
</Found>
5+
<NotFound>
6+
<LayoutView Layout="@typeof(MainLayout)">
7+
<p>Sorry, there's nothing at this address.</p>
8+
</LayoutView>
9+
</NotFound>
10+
</Router>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net5.0</TargetFramework>
5+
</PropertyGroup>
6+
7+
<ItemGroup>
8+
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="5.0.5" />
9+
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="5.0.5" PrivateAssets="all" />
10+
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.2.9" />
11+
<PackageReference Include="System.Net.Http.Json" Version="5.0.0" />
12+
</ItemGroup>
13+
14+
</Project>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
@page "/counter"
2+
3+
<h1>Counter</h1>
4+
5+
<p>Current count: @currentCount</p>
6+
7+
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
8+
9+
@code {
10+
private int currentCount = 0;
11+
12+
private void IncrementCount()
13+
{
14+
currentCount++;
15+
}
16+
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
@page "/fetchdata"
2+
@using System.Linq.Dynamic.Core
3+
@inject HttpClient Http
4+
5+
<h1>Weather forecast</h1>
6+
7+
<p>This component demonstrates fetching data from the server.</p>
8+
9+
@if (forecasts == null)
10+
{
11+
<p><em>Loading...</em></p>
12+
}
13+
else
14+
{
15+
<div class="d-flex">
16+
<h3>Order by</h3>
17+
<div class="form-inline ml-4">
18+
<div class="form-check form-check-inline">
19+
<input class="form-check-input" type="checkbox" name="rbOrder" id="cbOrder" checked="@isDescending" @onclick="@SetOrderingDirection">
20+
<label class="form-check-label" for="cbOrder">descending</label>
21+
</div>
22+
</div>
23+
</div>
24+
<div class="form-inline">
25+
@foreach (var member in typeof(WeatherForecast).GetProperties().Select(p => p.Name))
26+
{
27+
<div class="form-check form-check-inline">
28+
<input class="form-check-input" type="radio" name="rbOrder" id="@("rbOrder" + member)" checked="@(currentOrder == member)" @onchange="@((args) => SetOrder(member))">
29+
<label class="form-check-label" for="@("rbOrder" + member)">@member</label>
30+
</div>
31+
}
32+
</div>
33+
<table class="table">
34+
<thead>
35+
<tr>
36+
<th>Date</th>
37+
<th>Temp. (C)</th>
38+
<th>Temp. (F)</th>
39+
<th>Summary</th>
40+
</tr>
41+
</thead>
42+
<tbody>
43+
@foreach (var forecast in forecasts)
44+
{
45+
<tr>
46+
<td>@forecast.Date.ToShortDateString()</td>
47+
<td>@forecast.TemperatureC</td>
48+
<td>@forecast.TemperatureF</td>
49+
<td>@forecast.Summary</td>
50+
</tr>
51+
}
52+
</tbody>
53+
</table>
54+
}
55+
56+
@code {
57+
private WeatherForecast[] forecasts;
58+
private string currentOrder;
59+
private bool isDescending;
60+
61+
62+
protected override async Task OnInitializedAsync()
63+
{
64+
forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("sample-data/weather.json");
65+
}
66+
67+
protected void SetOrder(string propertyName)
68+
{
69+
currentOrder = propertyName;
70+
Order();
71+
}
72+
73+
protected void SetOrderingDirection()
74+
{
75+
isDescending = !isDescending;
76+
Order();
77+
}
78+
79+
private void Order()
80+
{
81+
if (!string.IsNullOrEmpty(currentOrder))
82+
{
83+
forecasts = forecasts.AsQueryable().OrderBy($"{currentOrder} {(isDescending ? "descending" : "ascending")}").ToArray();
84+
}
85+
86+
}
87+
88+
public class WeatherForecast
89+
{
90+
public DateTime Date { get; set; }
91+
92+
public int TemperatureC { get; set; }
93+
94+
public string Summary { get; set; }
95+
96+
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
97+
}
98+
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
@page "/fetchdata2"
2+
@using System.Linq.Dynamic.Core
3+
@inject HttpClient Http
4+
5+
<h1>Weather forecast</h1>
6+
7+
<p>This component demonstrates fetching data from the server.</p>
8+
9+
@if (forecasts == null)
10+
{
11+
<p><em>Loading...</em></p>
12+
}
13+
else
14+
{
15+
<div class="d-flex">
16+
<h3>Order by</h3>
17+
<div class="form-inline ml-4">
18+
<div class="form-check form-check-inline">
19+
<input class="form-check-input" type="checkbox" name="rbOrder" id="cbOrder" checked="@isDescending" @onclick="@SetOrderingDirection">
20+
<label class="form-check-label" for="cbOrder">descending</label>
21+
</div>
22+
</div>
23+
</div>
24+
<div class="form-inline">
25+
@foreach (var member in typeof(WeatherForecast).GetProperties().Select(p => p.Name))
26+
{
27+
<div class="form-check form-check-inline">
28+
<input class="form-check-input" type="radio" name="rbOrder" id="@("rbOrder" + member)" checked="@(currentOrder == member)" @onchange="@((args) => SetOrder(member))">
29+
<label class="form-check-label" for="@("rbOrder" + member)">@member</label>
30+
</div>
31+
}
32+
</div>
33+
<table class="table">
34+
<thead>
35+
<tr>
36+
<th>Date</th>
37+
<th>Temp. (C)</th>
38+
<th>Temp. (F)</th>
39+
<th>Summary</th>
40+
</tr>
41+
</thead>
42+
<tbody>
43+
@foreach (var forecast in forecasts)
44+
{
45+
<tr>
46+
<td>@forecast.Date.ToShortDateString()</td>
47+
<td>@forecast.TemperatureC</td>
48+
<td>@forecast.TemperatureF</td>
49+
<td>@forecast.Summary</td>
50+
</tr>
51+
}
52+
</tbody>
53+
</table>
54+
}
55+
56+
@code {
57+
private WeatherForecast[] forecasts;
58+
private string currentOrder;
59+
private bool isDescending;
60+
61+
62+
protected override async Task OnInitializedAsync()
63+
{
64+
forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("sample-data/weather.json");
65+
}
66+
67+
protected void SetOrder(string propertyName)
68+
{
69+
currentOrder = propertyName;
70+
Order();
71+
}
72+
73+
protected void SetOrderingDirection()
74+
{
75+
isDescending = !isDescending;
76+
Order();
77+
}
78+
79+
private void Order()
80+
{
81+
if (!string.IsNullOrEmpty(currentOrder))
82+
{
83+
forecasts = forecasts.AsQueryable().OrderBy($"{currentOrder} {(isDescending ? "descending" : "ascending")}").ToArray();
84+
}
85+
86+
}
87+
88+
public class WeatherForecast
89+
{
90+
public DateTime Date { get; set; }
91+
92+
public int TemperatureC { get; set; }
93+
94+
public string Summary { get; set; }
95+
96+
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
97+
}
98+
}

0 commit comments

Comments
 (0)