Linq to SQL/C#: как упорядочить, используя свойство в таблице перекрестных ссылок с лямбда-выражениями

Я пытаюсь заказать список продуктов на основе свойства zindex таблицы перекрестных ссылок с таблицей категорий (в данном случае называемой «Шасси»), но получаю следующую ошибку:

Невозможно упорядочить по типу «System.Collections.Generic.IEnumerable`1[System.Int32]».

Я использую следующий метод:

public IQueryable<E_Product> Product_GetList_ByChassisId(int chassisId)
{
    return dc.E_Products
        .Where(x => x.Deleted == false)
        .Where(x => x.Published == true)
        .Where(x => x.E_Product_Chassis
            .Any(c => c.ChassisId == chassisId && c.Deleted == false))
        .OrderBy(x => x.E_Product_Chassis.Select(c => c.Zindex));
}

Я понимаю, что метод .Select возвращает IEnumerable, но, будучи отношением «многие ко многим», x.E_Product_Chassis не позволяет просто выбирать его свойства (например, x.E_Product_Chassis.Zindex).

Любая помощь будет очень признательна...


person user373253    schedule 22.06.2010    source источник


Ответы (1)


FirstOrDefault(), Min(), Max() -- используйте одну из этих функций для выбора соответствующего z-индекса из набора.

public IQueryable<E_Product> Product_GetList_ByChassisId(int chassisId) 
{ 
    return dc.E_Products 
        .Where(x => x.Deleted == false) 
        .Where(x => x.Published == true) 
        .Where(x => x.E_Product_Chassis 
            .Any(c => c.ChassisId == chassisId && c.Deleted == false)) 
        .OrderBy(x => x.E_Product_Chassis.Min(c => c.Zindex)); 
}
person tvanfosson    schedule 22.06.2010
comment
FirstOrDefault(), Min(), Max()... или любой другой метод возврата скалярного значения из коллекции. Просто хотел отметить, что это не единственные ваши селекторы. - person Marc; 22.06.2010