2015-09-11 6 views
0

Так что у меня есть проблема, когда код выбирает категорию , и мне нужно изменить порядок сортировки, чтобы сортировать по продукту.Name Then By category.name.Linq сортировать по товарам, но показывать cateogires

Но проблема в том, что я все еще хочу выбрать категорию, но как я могу сортировать по product.name сначала без добавления дополнительного соединения или выбора.

из категории в категориях выберите category.name OrderBy category.Name // OrderBy категория имя

Позже ввиду цикла я Еогеасп (category.products) и передать в category.product [я] для просмотра для отображения

Но порядок сортировки неправильный, заказ всегда по категории. Имя Как мне сортировать по Product.Name сначала, а затем по Category.Name? Будет ли SelectMany помочь? Опять же, я не хочу нарушать часть запроса , а именно «Заказ по материалам».

класс Продукт { public string Имя {get; задавать; } public int CategoryID {get; задавать; } }

класс Категория { public string Имя {get; задавать; } public int ID {get; задавать; } }

// Укажите первый источник данных. статические Категории списка = новый Список() { новый Категория() {Name = "Beverages", ID = 001}, новый Категория() {Name = "Приправы", ID = 002}, Категория() {Name = "Vegetables", ID = 003}, новый Категория() {Name = "Grains", ID = 004}, новый Категория() {Name = "Fruit", ID = 005}
};

// Укажите второй источник данных. Статические Список продуктов = новый Список() { новый продукт {Name = "Cola", CategoryID = 001}, новый продукт {Name = "Tea", CategoryID = 001}, новый продукт {Name = "Mustard" , CategoryID = 002}, новый продукт {Name = "Pickles", CategoryID = 002}, новый продукт {Name = "Carrots", CategoryID = 003}, новый продукт {Name = "Bok Choy", CategoryID = 003 }, новый продукт {Name = "Peaches", CategoryID = 005}, новый продукт {Name = "дыни", категорияID = 005}, };

+0

Можете ли вы показать запросы, которые вы используете? –

+0

извините, что не могу опубликовать комментарий, но я допустил ошибку – user114141

+0

class Категория { – user114141

ответ

0

О, я видел ваш запрос, он был плохо отформатирован.

Вы должны order by Product.Name group by Category.Name

+0

см. Мой форматированный код выше – user114141

0
//LinqPad code 

class Category 
{ 
    public string Name { get; set; } 
    public int ID { get; set; } 
    public List<Product> products { get; set;} 
} 

class Product 
{ 
    public string Name { get; set; } 
    public int ID { get; set; } 
} 


void Main() 
{ 
     // Specify the second data source. 
     List<Product> BevProducts = new List<Product>() 
     { 
      new Product{Name="ZCola"}, 
     }; 

     // Specify the third data source. 
     List<Product> CondProducts = new List<Product>() 
     { 
      new Product{Name="Sugar"}, 
     }; 
     // Specify the first data source. 
    List<Category> categories = new List<Category>() 
     { 
      new Category(){Name="Beverages", ID=001, products=BevProducts}, 
      new Category(){ Name="Condiments", ID=002, products=CondProducts}, 

     }; 



     var sortedCats = categories.OrderBy(c => c.ID).ToList(); 

     foreach (var category in sortedCats) 
     { 
      //display category 
      System.Console.Out.WriteLine(category.Name); 

     //Assuming each category contains exactly one product in the list ie 1 to 1 relationship 
// how can I sort by product.Name, so if ZCola comes before Sugar, ZCola's Category (Beverages) sorts before Condiments 
// so in this Case Beverages, Condiments is the right order, because ZCola comes after Sugar. 
      var sortedProductsPerCategory = category.products.OrderBy(p => p.Name).ToList(); 

      foreach (var product in sortedProductsPerCategory) 
      { 
        //display product 
        System.Console.Out.WriteLine(" " + product.Name); 
      } 
     } 



} 
+0

Итак, правильный заказ Sugar, ZCola Но это печатает ZCola, Sugar – user114141

0
class Category 
{ 
    public string Name { get; set; } 
    public int ID { get; set; } 
    public List<Product> products { get; set;} 
} 

class Product 
{ 
    public string Name { get; set; } 
    public int ID { get; set; } 
} 


void Main() 
{ 
     // Specify the second data source. 
     List<Product> BevProducts = new List<Product>() 
     { 
      new Product{Name="ZCola"}, 
     }; 

     // Specify the third data source. 
     List<Product> CondProducts = new List<Product>() 
     { 
      new Product{Name="Sugar"}, 
     }; 
     // Specify the first data source. 
    List<Category> categories = new List<Category>() 
     { 
      new Category(){Name="Beverages", ID=001, products=BevProducts}, 
      new Category(){ Name="Condiments", ID=002, products=CondProducts}, 

     }; 



     var sortedCats = categories.OrderBy(c => c.products.Min(p => p.Name)).ToList(); 

     foreach (var category in sortedCats) 
     { 
      //display category 
      System.Console.Out.WriteLine(category.Name); 


      //Assuming each category contains exactly one product in the list ie 1 to 1 relationship 
      // how can I sort by product.Name, so if ZCola comes before Sugar, ZCola's Category (Beverages) sorts before Condiments 
      // so in this Case Beverages, Condiments is the right order, because ZCola comes after Sugar. 
      var sortedProductsPerCategory = category.products.OrderBy(p => p.Name).ToList(); 

      foreach (var product in sortedProductsPerCategory) 
      { 
        //display product 
        System.Console.Out.WriteLine(" " + product.Name); 
      } 
     } 



} 
+0

Это правильный ответ .. нужно используйте Min .. извините за путаницу !!! – user114141

Смежные вопросы