如何将查询转换为另一个接口的查询以基于该接口添加约束

How to cast query to query of another interface to add constrainst based on that

我想在 C# EF Core(使用 .net core 3.0)中实现关键字搜索,这将进入我的查询构建管道。

if (!string.IsNullOrEmpty(searchKeyword) && query is IQueryable<IFullTextSearchable> queryFullTextSearchable)
{
      return queryFullTextSearchable.Where(x => x.FullSearchText == searchKeyword).Cast<TGetOutput>();
}

但是在它完成这个和 sorting/paging 之后,它会抛出无法翻译查询的错误。我很好奇是否有可能在数据库中评估此类查询?如果可以,怎么做?

简答,您可以使用 Dynamic Linq 来完成。从 Nuget System.Linq.Dynamic.Core -Version 1.0.19 安装包,然后

return queryFullTextSearchable.Where($"FullSearchText == {searchKeyword}");

但是,不确定该检查 query is IQueryable<IFullTextSearchable> queryFullTextSearchable 是否有效。如果您知道要执行查询的实体实际上是 IFullTextSearchable,则不需要进行额外检查。