Linq按产品排序,但显示类别

Linq按产品排序,但显示类别,linq,list,sorting,product,Linq,List,Sorting,Product,因此,我有一个问题,代码是选择一个类别 我需要将排序顺序改为按product.Name排序,然后按category.Name排序 但问题是我仍然想选择一个类别,但我该如何选择呢 首先按product.name排序,不添加额外的联接或选择 从类别中的类别 选择category.name orderby category.Name//orderby category Name 稍后在视图中,我循环foreach(category.products)并传入category.product[I]以查看显

因此,我有一个问题,代码是选择一个类别 我需要将排序顺序改为按product.Name排序,然后按category.Name排序

但问题是我仍然想选择一个类别,但我该如何选择呢 首先按product.name排序,不添加额外的联接或选择

从类别中的类别 选择category.name orderby category.Name//orderby category Name

稍后在视图中,我循环foreach(category.products)并传入category.product[I]以查看显示

但排序顺序是错误的,顺序总是按类别 如何按产品进行排序。首先按名称,然后按类别进行排序。名称? 会有很多帮助吗?同样,我不想中断选择 我的问题的一部分,就是按物品排序

类产品 { 公共字符串名称{get;set;} public int CategoryID{get;set;} }

类别 { 公共字符串名称{get;set;} 公共int ID{get;set;} }

//指定第一个数据源。 静态列表类别=新列表() { 新类别(){Name=“Beverages”,ID=001}, 新类别(){Name=“调味品”,ID=002}, 新类别(){Name=“蔬菜”,ID=003}, 新类别(){Name=“Grains”,ID=004}, 新类别(){Name=“Fruit”,ID=005}
};

//指定第二个数据源。 静态列表产品=新列表() { 新产品{Name=“Cola”,类别ID=001}, 新产品{Name=“Tea”,类别ID=001}, 新产品{Name=“芥末”,类别ID=002}, 新产品{Name=“Pickles”,类别ID=002}, 新产品{Name=“Carrots”,类别ID=003}, 新产品{Name=“Bok Choy”,类别ID=003}, 新产品{Name=“Peaches”,类别ID=005}, 新产品{Name=“瓜”,类别ID=005},
};

哦,我看到你的查询了,它的格式很糟糕

您需要按产品订购。按类别分组。名称
//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);
            }
        }



} 
类别 { 公共字符串名称{get;set;} 公共int ID{get;set;} 公共列表产品{get;set;} } 类产品 { 公共字符串名称{get;set;} 公共int ID{get;set;} } void Main() { //指定第二个数据源。 List BevProducts=新列表() { 新产品{Name=“ZCola”}, }; //指定第三个数据源。 列表产品=新列表() { 新产品{Name=“Sugar”}, }; //指定第一个数据源。 列表类别=新列表() { 新类别(){Name=“Beverages”,ID=001,products=BevProducts}, 新类别(){Name=“consuments”,ID=002,products=consumentproducts}, }; var sortedCats=categories.OrderBy(c=>c.ID.ToList(); foreach(分拣数据类别中的var类别) { //显示类别 System.Console.Out.WriteLine(类别名称); //假设每个类别在列表中仅包含一个产品,即1:1关系 //如何按产品名称排序,所以如果ZCola排在糖之前,那么ZCola的类别(饮料)排在调味品之前 //因此,在这种情况下,饮料、调味品是正确的顺序,因为ZCola在糖之后。 var sortedProductsPerCategory=category.products.OrderBy(p=>p.Name.ToList(); foreach(分类产品类别中的var产品) { //展示产品 System.Console.Out.WriteLine(“+product.Name”); } } }
类别
{
公共字符串名称{get;set;}
公共int ID{get;set;}
公共列表产品{get;set;}
}
类产品
{
公共字符串名称{get;set;}
公共int ID{get;set;}
}
void Main()
{
//指定第二个数据源。
List BevProducts=新列表()
{
新产品{Name=“ZCola”},
};
//指定第三个数据源。
列表产品=新列表()
{
新产品{Name=“Sugar”},
};
//指定第一个数据源。
列表类别=新列表()
{ 
新类别(){Name=“Beverages”,ID=001,products=BevProducts},
新类别(){Name=“consuments”,ID=002,products=consumentproducts},
};
var sortedCats=categories.OrderBy(c=>c.products.Min(p=>p.Name)).ToList();
foreach(分拣数据类别中的var类别)
{
//显示类别
System.Console.Out.WriteLine(类别名称);
//假设每个类别在列表中仅包含一个产品,即1:1关系
//如何按产品名称排序,所以如果ZCola排在糖之前,那么ZCola的类别(饮料)排在调味品之前
//因此,在这种情况下,饮料、调味品是正确的顺序,因为ZCola在糖之后。
var sortedProductsPerCategory=category.products.OrderBy(p=>p.Name.ToList();
foreach(分类产品类别中的var产品)
{
//展示产品
System.Console.Out.WriteLine(“+product.Name”);
}
}
} 

很抱歉,我无法发布评论,但我犯了一个错误Class Category{List products;public string Name{get;set;}public int ID{get;set;}}}很抱歉,我应该说Categories有一个列表或产品。可能是类中的一个属性。这是修改后的代码,您可以将其注入LinqPad4,因此正确的顺序是Sugar,ZCola,但这将打印ZCola,Sugar
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);
            }
        }



}