Selecting an item in a DropDownDataGrid causes exception

In this very simple example:

image

available at:

https://drive.google.com/file/d/1VnKh-wP8GJZsrdIfClCjzo6Ym6SubS9a/view?usp=sharing

you can see how when you select an item in the DropDownDataGrid, it fails with the following error:

blazor.server.js:19 [2021-10-05T09:22:39.452Z] Error: System.NotSupportedException: Unable to cast the type 'BlazorRadzenTests.Country' to type 'System.Object'. LINQ to Entities only supports casting EDM primitive or enumeration types.
   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.ValidateAndAdjustCastTypes(TypeUsage toType, TypeUsage fromType, Type toClrType, Type fromClrType)
   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.GetCastTargetType(TypeUsage fromType, Type toClrType, Type fromClrType, Boolean preserveCastForDateTime)
   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.CreateCastExpression(DbExpression source, Type toClrType, Type fromClrType)
   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.CastMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)
   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod)
   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)
   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)
   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.Convert()
   at System.Data.Entity.Core.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption)
   at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass41_0.<GetResults>b__1()
   at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
   at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass41_0.<GetResults>b__0()
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
   at System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
   at System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__31_0()
   at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Radzen.DropDownBase`1.get_View()
   at Radzen.DropDownBase`1.SetSelectedIndexFromSelectedItem()
   at Radzen.DropDownBase`1.SelectItem(Object item, Boolean raiseChange)
   at Radzen.Blazor.RadzenDropDownDataGrid`1.OnRowSelect(Object item)
   at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)
   at Radzen.Blazor.RadzenDataGrid`1.OnRowSelect(Object item, Boolean raiseChange)
   at Radzen.Blazor.RadzenDataGrid`1.OnRowClick(DataGridRowMouseEventArgs`1 args)
   at Radzen.Blazor.RadzenDataGridCell`1.OnClick(MouseEventArgs args)
   at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle)

This also happened after v2.15.13 but was fixed after I reported it.

Now, I have been checking old versions and the last version that had this working properly was 3.4.0. It is broken since 3.4.1

You can easily attach the source code to check why this exception is raised.

I attached the test project that shows the error in the previous post:

https://drive.google.com/file/d/1VnKh-wP8GJZsrdIfClCjzo6Ym6SubS9a/view?usp=sharing

because it didn't let me attach it here (even if it is less than 4096KB)

I was referring more on attach the source code to your project to debug the exception.

could you elaborate how?

Is there any plan to fix this? It is a very basic case that breaks all the dropdown controls

Hey @manu,

We are open source and we accept pull request. I already suggested you to debug the problem and if there is a bug in our component you can submit your fix for review. We accept various pull requests daily.

Fair enough @enchev

The problem is in the View Property in DropDownBase. The getter ends with:

                else
                {
                    _view = (typeof(IQueryable).IsAssignableFrom(Data.GetType())) ? Query.Cast<object>().ToList().AsQueryable() : Query;
                }
            }
        }

        return _view;
    }
}

changing it to:

                else
                {
                    _view = (typeof(IQueryable).IsAssignableFrom(Data.GetType())) ? (Query as IEnumerable).Cast<object>().ToList().AsQueryable() : Query;
                }
            }
        }

        return _view;
    }
}

fixes the problem. The explanation is here:

BR,
Manu