我正在尝试使用 SQL 运算符 CONTAINSTABLE
来获取搜索结果列表,如下所示:
SELECT c.*, ccontains.[RANK]
FROM Customers c
INNER JOIN CONTAINSTABLE(Customers, LastName, @searchTerm) ccontains ON c.Id = ccontains.[KEY]
并从 EF Core 2.1 调用此函数:
var query = DbContext.Customers.FromSql("SELECT * FROM udfSearchCustomers(@searchTerm)",
new SqlParameter(@searchTerm, mySearchTerm));
query = query.Include(c => c.Addresses).Take(maxResults);
我想按 RANK
降序排列我的搜索结果,以便在顶部获得最相关的结果。不允许向我的函数添加 ORDER BY ccontains.[RANK]
,因为我的 SELECT * FROM udfSearchCustomers(...)
将由 EF Core 包装:ORDER BY
不允许在内部查询中使用。添加 query.OrderBy(c => c.Rank)
是不可能的,因为 RANK
不在 Customer
实体上。
我已经尝试使用 System.Linq.Dynamic
以及其他反射解决方案来执行此操作:
query = query.OrderBy("Rank");
但我有一个异常(exception):
"Rank" is not a member of type "Customer"
这是真的。有什么方法可以对不在实体上的列进行排序,还是我需要创建一个 MyCustomerSearchQuery
查询对象并使用 AutoMapper 将它们转换为 Customer
?我宁愿不这样做,因为 Customer
有很多属性,保持这些属性同步会很麻烦。
提前致谢!
最佳答案
你可以试试
query = query.OrderBy(x => x.Rank);
或
query = query.OrderBy(x => x["Rank"]);
关于c# - 按未选择的列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58656891/