На сервере SQL union
результат сортируется по столбцу первичного ключа. Я хочу предотвратить такое поведение в инфраструктуре сущностей.
В этом сообщении @praveen объяснил, как это сделать в чистый sql. Но я хочу сделать это в Entity Framework.
Мой код:
public virtual ActionResult Search(string keyword)
{
var products = _db.Products
.Where(x => x.IsActive)
.AsQueryable();
var productExactlyTitle = products.Where(x => x.Title == keyword);
var productStartTitle = products.Where(x => x.Title.StartsWith(keyword));
var productContainsTitle = products.Where(x => x.Title.Contains(keyword)
|| x.Title.Contains(keyword)
|| x.SubTitle.Contains(keyword)
|| x.OtherName.Contains(keyword));
var productList = productExactlyTitle.Union(productStartTitle)
.Union(productContainsTitle)
.Take(10)
.AsEnumerable()
.Select(x => new ProductItemViewModel()
{
Id = x.Id,
Title = x.Title,
Price = x.Price.ToPrice(),
Image = x.Images.FirstOrDefault(y => y.IsCoverPhoto)?.ImageUrl
});
// some code ...
}
Я хочу показать записи в следующем порядке:
Первый: записи productExactlyTitle
Второй: записи productStartTitle
Третий: записи productContainsTitle
Но результат отсортирован по столбцу Id
! и я не хочу этого.
Есть ли способ сделать это?