【发布时间】:2021-11-04 10:24:50
【问题描述】:
我有一个包含几百列的表,我从客户端将多个“搜索”对象传递给用于查询该表的服务器。每个搜索对象都包含一个搜索词,以及与之匹配的属性名称。
我不确定如何在此处使用反射来使用 EF Core 查询属性。我尝试了以下但它不喜欢它。
var prop = <ENTITYTYPE>.GetProperty(search.Property);
query = context.<ENTITY>.Where(x => (string)prop.GetValue(x) == search.SearchTerm);
我在想我可能必须构建一个原始 SQL 查询,但我很想知道是否有一种方法可以让 EF Core 自行创建查询。当我在上面执行.ToList() 时,它说无法翻译查询。
任何帮助将不胜感激!
【问题讨论】:
-
您不能在 EF Core 查询中使用反射,也不能像这样按名称传递属性。
Where可以使用任何有效的表达式,因此您可以重写代码以将Expression<Func<TEntity,bool>>作为过滤器而不是字符串传递。您也可以使用 Dynamic LINQ 包来解析字符串表达式,但这会丢失任何类型的编译时检查
标签: c# .net-core entity-framework-core