首页 > 解决方案 > 如何将查询转换为另一个接口的查询以基于该接口添加约束

问题描述

我想在 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>();
}

但是在它经过这个和排序/分页之后,它会抛出一个错误,它不能翻译查询。我很好奇是否可以在数据库中评估这样的查询?如果是这样,怎么做?

标签: c#entity-frameworklinqentity-framework-core.net-core-3.0

解决方案


简短的回答,您可以使用 Dynamic Linq 来完成。从 Nuget 安装软件包System.Linq.Dynamic.Core -Version 1.0.19,然后只需

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

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


推荐阅读