SearchExtensions
SearchExtensions copied to clipboard
In NetCore 3.0 project, ToRanked not working
Code looks like below:
return await _entities.Search(x => x.Propname).Containing(keywords.Split(' '))
.ToRanked().OrderByDescending(x => x.Hits)
.Select(x => x.Item)
.ToListAsync();
It seems to me the query created has some kind of issue:
System.InvalidOperationException: The LINQ expression 'DbSet<TbHotelProperty> .Where(t => t.Propname.Contains("omni")) .OrderByDescending(t => new Ranked<TbHotelProperty>{ Hits = (t.Propname ?? "").Length - (t.Propname ?? "").Replace( oldValue: "omni", newValue: "").Length / 4, Item = t } .Hits)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.
Let me know if any other information could be useful to understand the problem.
I've the same problem
This code in the tutorial
var result = context.Users.Search(x => x.FirstName, x => x.LastName, x.MiddleName) .Containing("John") .ToRanked() .OrderByDescending(r => r.Hits) // Order by Hits property of IRanked<User> .Take(10);
doesn't work and an exception raises with this message
could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.
it works only when you convert the link query to Enumerable before calling OrderByDescending() but that doesn't make sense at all because by this way I get a lot of un needed rows from the database
This issue should not occur when using Microsoft.EntityFrameworkCore.SqlServer Version >= 3.1.3