Postupy: Řazení výsledků klauzule join (Průvodce programováním v C#)
Tento příklad ukazuje výsledky operace spojení.Všimněte si, že řazení se provádí po spojení.Přestože lze použít orderby sequences klauzule s jedním nebo více zdroje před spojení, obecně nedoporučujeme ji.Některé LINQ poskytovatelů pravděpodobně není Zachovat řazení po spojení.
Příklad
Tento dotaz vytvoří spojení skupiny a potom seřadí skupiny založené na kategorii prvku, který je stále v oboru.Uvnitř inicializátoru anonymní typ objednávky poddotazu obsahuje odpovídající prvky z řady produktů.
class HowToOrderJoins
{
#region Data
class Product
{
public string Name { get; set; }
public int CategoryID { get; set; }
}
class Category
{
public string Name { get; set; }
public int ID { get; set; }
}
// Specify the first data source.
List<Category> categories = new List<Category>()
{
new Category(){Name="Beverages", ID=001},
new Category(){ Name="Condiments", ID=002},
new Category(){ Name="Vegetables", ID=003},
new Category() { Name="Grains", ID=004},
new Category() { Name="Fruit", ID=005}
};
// Specify the second data source.
List<Product> products = new List<Product>()
{
new Product{Name="Cola", CategoryID=001},
new Product{Name="Tea", CategoryID=001},
new Product{Name="Mustard", CategoryID=002},
new Product{Name="Pickles", CategoryID=002},
new Product{Name="Carrots", CategoryID=003},
new Product{Name="Bok Choy", CategoryID=003},
new Product{Name="Peaches", CategoryID=005},
new Product{Name="Melons", CategoryID=005},
};
#endregion
static void Main()
{
HowToOrderJoins app = new HowToOrderJoins();
app.OrderJoin1();
// Keep console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
void OrderJoin1()
{
var groupJoinQuery2 =
from category in categories
join prod in products on category.ID equals prod.CategoryID into prodGroup
orderby category.Name
select new
{
Category = category.Name,
Products = from prod2 in prodGroup
orderby prod2.Name
select prod2
};
foreach (var productGroup in groupJoinQuery2)
{
Console.WriteLine(productGroup.Category);
foreach (var prodItem in productGroup.Products)
{
Console.WriteLine(" {0,-10} {1}", prodItem.Name, prodItem.CategoryID);
}
}
}
/* Output:
Beverages
Cola 1
Tea 1
Condiments
Mustard 2
Pickles 2
Fruit
Melons 5
Peaches 5
Grains
Vegetables
Bok Choy 3
Carrots 3
*/
}
Probíhá kompilace kódu
Vytvoření Visual Studio projektu, který se zaměřuje.NET Framework verze 3.5.Ve výchozím nastavení projektu odkazuje na System.Core.dll a using směrnice pro obor názvů System.Linq.
Zkopírujte kód do projektu.
Stisknutím klávesy F5 sestavit a spustit program.
Stisknutím libovolné klávesy uzavřete okno konzoly.
Viz také
Referenční dokumentace
orderby – klauzule (Referenční dokumentace jazyka C#)
join – klauzule (Referenční dokumentace jazyka C#)