c# - 按未选择的列排序
问题描述
我正在尝试使用 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");
但我有一个例外:
“Rank”不是“Customer”类型的成员
这是真的。有没有办法对不在实体上的列进行排序,或者我需要创建一个MyCustomerSearchQuery
查询对象并使用 AutoMapper 将它们转换为Customer
?我宁愿不这样做,因为Customer
有许多属性并且保持它们同步会很麻烦。
提前致谢!
解决方案
你可以试试
query = query.OrderBy(x => x.Rank);
或者
query = query.OrderBy(x => x["Rank"]);
推荐阅读
- javascript - this.someFunc.bind(this, a, b, c) Vs () => this.someFunc(a, b, c)
- java - 本机 jvm 文件(Object.c、Class.c)编译/链接到哪里?
- c++ - 我可以使用在类构造函数中初始化的流类型的成员变量吗?
- javascript - 使用 .mjs 文件扩展名 js 模块
- rabbitmq - 使用 Spring-context 进行集成测试不接收 RabbitMQ 消息
- c++ - 在现代 CMake 中将接口库添加为 SYSTEM
- c# - .NET System.Security.Cryptographic 中来自 CAPICOM 的 AES 解密
- jmeter - 如何根据命令行传入的Environment参数执行Jmeter脚本
- qt - 如何将 QTableWidget + QComboBox 放在一起,如果值从同一行的 QComboBox 更改,如何访问特定行
- r - 如何使用“应用”自动将标题放在一系列生成的图上