Как использовать LINQ в проекте MVC, как упорядочить значение объединенной таблицы? - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть два класса, которые я объединяю:

Элемент

(набор свойств)

(внешний ключ) int Category

Категория

(первичный ключ) int ID (на это есть ссылка в Item)

имя строки

Использование LINQ в моем MVC5 проекта, мне нужно получить и отсортировать по значению имени из таблицы категорий, используя идентификатор в таблице элементов.С кодом ниже, это сортировка в порядке целого числа (1,2,3,4) вместо свойства Name в таблице Category.Как сортировать по таблице категорий?

Код контроллера:

var items = from s in db.Items 
            join c in db.Categories on s.Category equals c.ID
            select s;

switch (sortOrder)
        {
            case "Category_Desc":
                //This is where it is selecting the integer ID instead of the string Name
                items = items.OrderByDescending(s => s.Category);
                break;
            default:
                items = items.OrderBy(s => s.Category);
                break;
        }

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Вы можете попробовать следующее

Вы можете попробовать следующее.

var result = db.Items
            .Join(db.Categories,i=> i.Category, c=>c.Id,(i,c)=>new {item =i, category=c})
            .OrderBy(x=>x.category.Name).Select(x=>x.item);

Суть в создании временной структуры, которая включает Category.Name.

0 голосов
/ 30 ноября 2018

Свойство Category вашего класса Item является целым числом, поэтому оно будет упорядочивать их так же, как и любое другое целое число.Сейчас ваше объединение не имеет смысла, так как вы выбираете только элементы в конце вашего запроса.Вместо этого выберите анонимный объект, который содержит как категорию, так и элемент, тогда у вас будет доступ к свойствам вашего Category класса, вы сможете отсортировать по имени и выбрать только Item.

var query= from s in db.Items 
        join c in db.Categories on s.Category equals c.ID
        select new { item = s, cat = c };
switch (sortOrder)
{
    case "Category_Desc":
        //This is where it is selecting the integer ID instead of the string Name
        items = items.OrderByDescending(s => s.cat.Name);
        break;
    default:
        items = items.OrderBy(s => s.cat.Name);
        break;
}
var items = query.Select(s => s.item);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...