- 4.8.1
- Angular
- .net core 2.2 / .net 4.6.1
Hi
we have an issue on abp and LINQ to SQL. We have create a JSON_VALUE function and it works fine until we try to call it from IQuerable static extension. Our project is very complex but I have create a empty project and add 2 DLL to reproduce the error. The step are:
create 1 DLL (abp module or not is the same)
create and abstract class to extend a AppService
cerate a IQuerable extension to add a where with JSON_VALUE dbFunction
if I call in base abstract class where I call ToList / ToArray I catch a NotImplemented Exception
if I add the where directly on AppService and call ToList/ToArray the SQL will be translatend in correct way
var query = from auditLog in _repository.GetAll()
join user in _repositoryUser.GetAll() on auditLog.EditionId equals user.Id into userJoin
from joinedUser in userJoin.DefaultIfEmpty()
//where DemoEfCoreSqlJsonExtension.JsonValue(auditLog.TenancyName,"$") != null
select new FullTenant { TenancyName = auditLog.TenancyName, Tenant = auditLog, Edition = joinedUser };
var hjkh = query.ToList();
public static class DemoEfCoreSqlJsonExtension
{
[DbFunction("JSON_VALUE", "")]
public static string JsonValue(string column, [NotParameterized] string path)
{
throw new NotSupportedException();
}
[DbFunction("JSON_QUERY", "")]
public static string JsonQuery(string column, [NotParameterized] string path)
{
throw new NotSupportedException();
}
}
public static class DemoQueryableExtensions
{
public static IQueryable<TGetAllListResult> DemoApplyExtraFieldFilter<TGetAllListResult>(
this IQueryable<TGetAllListResult> query)
where TGetAllListResult : class, IDynamicTelerikExtraFields
{
return Queryable.Where(query, x => DemoEfCoreSqlJsonExtension.JsonValue(x.TenancyName, "$") != null && Convert.ToDecimal(DemoEfCoreSqlJsonExtension.JsonValue(x.TenancyName, "$")) == 7);
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.HasDbFunction(() => DemoEfCoreSqlJsonExtension.JsonValue(default(string), default(string)));
modelBuilder.HasDbFunction(() => DemoEfCoreSqlJsonExtension.JsonQuery(default(string), default(string)));
It wokrs only on AppService or Core Module but not from static Extension
3 Answer(s)
-
0
Can you please share the error message?
-
0
Hi
the error message is NotSupportedException because the Linq interpreter not call the SQL Json Function but call static class
-
0
Hi @andmattia
I think this is not supported by EF Core. Were you able to run it on another app which is non-AspNet Zero ? As far as I know, you can't use such methods in your LINQ query.