UPDATE 2:
After further investigation I read about breaking changes in EF Core 3.0 preview 4 that disallow client-evaluation of query that cannot be propertly translate in SQL. For those interested read here .
Then in case of computed properties (as Telerik Blazor Knowledge Base suggests here Bind to navigation properties in complex objects and as I have done in the code above) it needs to use one of these solution mentioned here.
But using Templates I should avoid the client-eval problem, so I change the following code:
<GridColumn Field="@(nameof(Card.Patient.Cognome))" Title="Nome" Groupable="false">
<Template>
@((context as Card).Patient.Cognome)
</Template>
</GridColumn>
First of all, If I omit Field="@(nameof(Card.Patient.Cognome))" the app hang with this error:
System.ArgumentNullException: Value cannot be null. (Parameter 'key')
at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior)
at Telerik.Blazor.Components.Grid.Extensions.ColumnExtensions.GroupTitles(IEnumerable`1 columns)
at Telerik.Blazor.Components.TelerikGrid`1.<BuildRenderTree>b__0_1(RenderTreeBuilder __builder2)
at Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder.AddContent(Int32 sequence, RenderFragment fragment)
at Microsoft.AspNetCore.Components.CascadingValue`1.Render(RenderTreeBuilder builder)
at Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment)
at Microsoft.AspNetCore.Components.RenderTree.Renderer.RenderInExistingBatch(RenderQueueEntry renderQueueEntry)
at Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue()
Eccezione generata: 'System.InvalidOperationException' in Microsoft.AspNetCore.Components.Server.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.JSInterop.dll
Microsoft.AspNetCore.Routing.EndpointMiddleware: Information: Executed endpoint '/_blazor'
Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request finished in 9533.2773ms 101
Otherwise, If I try to filter the field (with FilterRow option) I get another error:
System.ArgumentNullException: Value cannot be null. (Parameter 'conversionType')
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType)
at Telerik.Blazor.Components.Grid.GridFilterHeaderBase`1.OnValueChanged(Object newValue)
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__139_0(Object state)
at Microsoft.AspNetCore.Components.Rendering.RendererSynchronizationContext.ExecuteSynchronously(TaskCompletionSource`1 completion, SendOrPostCallback d, Object state)
at Microsoft.AspNetCore.Components.Rendering.RendererSynchronizationContext.<>c.<.cctor>b__23_0(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location where exception was thrown ---
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at Microsoft.AspNetCore.Components.Rendering.RendererSynchronizationContext.ExecuteBackground(WorkItem item)
Eccezione generata: 'System.InvalidOperationException' in Microsoft.AspNetCore.Components.Server.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.JSInterop.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.AspNetCore.Components.Server.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.JSInterop.dll
Microsoft.AspNetCore.Routing.EndpointMiddleware: Information: Executed endpoint '/_blazor'
Eccezione generata: 'System.InvalidOperationException' in Microsoft.AspNetCore.Components.Server.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.JSInterop.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.AspNetCore.Components.Server.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.JSInterop.dll
Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request finished in 5296.0234ms 101
Eccezione generata: 'System.InvalidOperationException' in Microsoft.AspNetCore.Components.Server.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.JSInterop.dll
If I try to filter the field (with FilterMenu option) I get again another different error:
System.ArgumentException: Invalid property or field - 'Nome' for type: Card
at Telerik.DataSource.Expressions.MemberAccessTokenExtensions.CreateMemberAccessExpression(IMemberAccessToken token, Expression instance)
at Telerik.DataSource.Expressions.ExpressionFactory.MakeMemberAccess(Expression instance, String memberName)
at Telerik.DataSource.Expressions.ExpressionFactory.MakeMemberAccess(Expression instance, String memberName, Boolean liftMemberAccessToNull)
at Telerik.DataSource.Expressions.PropertyAccessExpressionBuilder.CreateMemberAccessExpression()
at Telerik.DataSource.Expressions.FilterDescriptorExpressionBuilder.CreateMemberExpression()
at Telerik.DataSource.Expressions.FilterDescriptorExpressionBuilder.CreateBodyExpression()
at Telerik.DataSource.FilterDescriptor.CreateFilterExpression(ParameterExpression parameterExpression)
at Telerik.DataSource.FilterDescriptorBase.CreateFilterExpression(Expression instance)
at Telerik.DataSource.Expressions.FilterDescriptorCollectionExpressionBuilder.CreateBodyExpression()
at Telerik.DataSource.CompositeFilterDescriptor.CreateFilterExpression(ParameterExpression parameterExpression)
at Telerik.DataSource.FilterDescriptorBase.CreateFilterExpression(Expression instance)
at Telerik.DataSource.Expressions.FilterDescriptorCollectionExpressionBuilder.CreateBodyExpression()
at Telerik.DataSource.Expressions.FilterExpressionBuilder.CreateFilterExpression()
at Telerik.DataSource.Extensions.QueryableExtensions.Where(IQueryable source, IEnumerable`1 filterDescriptors)
at Telerik.DataSource.Extensions.QueryableExtensions.CreateDataSourceResult[TModel,TResult](IQueryable queryable, DataSourceRequest request, Func`2 selector)
at Telerik.DataSource.Extensions.QueryableExtensions.ToDataSourceResult(IQueryable queryable, DataSourceRequest request)
at Telerik.DataSource.Extensions.QueryableExtensions.<>c__DisplayClass3_0.<ToDataSourceResultAsync>b__0()
at System.Threading.Tasks.Task`1.InnerInvoke()
at System.Threading.Tasks.Task.<>c.<.cctor>b__274_0(Object obj)
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location where exception was thrown ---
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of stack trace from previous location where exception was thrown ---
at Bipoint.Data.Model.BipointService.GetCards_Inseriti_PN(DataSourceRequest request) in C:\Users\francesco\Documents\myprojects\2Next\Projects\Bipoint\prove\BipointB\Data\Model\BipointService.cs:line 31
at Bipoint.Pages.Pn.ReadItems(GridReadEventArgs args) in C:\Users\francesco\Documents\myprojects\2Next\Projects\Bipoint\prove\BipointB\Pages\Pn.razor:line 62
at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)
at Telerik.Blazor.Components.TelerikGridBase`1.ProcessData()
at Telerik.Blazor.Components.TelerikGridBase`1.OnFilterChange(FilterDescriptorBase filter)
at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)
at Telerik.Blazor.Components.Common.Filters.FilterMenu.TelerikFilterMenuBase.Filter()
at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)
at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle)
Eccezione generata: 'System.InvalidOperationException' in Microsoft.AspNetCore.Components.Server.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.JSInterop.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.AspNetCore.Components.Server.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.JSInterop.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.AspNetCore.Components.Server.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.JSInterop.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.AspNetCore.Components.Server.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.JSInterop.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.AspNetCore.Components.Server.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.JSInterop.dll
Microsoft.AspNetCore.Routing.EndpointMiddleware: Information: Executed endpoint '/_blazor'
Eccezione generata: 'System.ObjectDisposedException' in Microsoft.AspNetCore.Components.dll
Eccezione generata: 'System.ObjectDisposedException' in Microsoft.AspNetCore.Components.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.AspNetCore.Components.Server.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.JSInterop.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.AspNetCore.Components.Server.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.JSInterop.dll
Eccezione generata: 'System.InvalidOperationException' in Microsoft.AspNetCore.Components.Server.dll
Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request finished in 25149.4359ms 101
Eccezione generata: 'System.InvalidOperationException' in Microsoft.JSInterop.dll
I'm sorry for the long post and a bit confused, but I hope can help you to improve your product.
Thanks