Я пытаюсь использовать оператор 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");
Но я получил исключение:
«Ранг» не является членом типа «Клиент»
, что верно. Есть ли способ заказать столбец, а не сущность, или мне нужно будет создать объект запроса MyCustomerSearchQuery
и использовать AutoMapper, чтобы преобразовать их в Customer
? Я бы предпочел не делать этого, поскольку Customer
имеет много свойств, и их синхронизация будет проблематичной.
Заранее спасибо!