Queryable.GroupBy Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Grupperar elementen i en sekvens.
Överlagringar
| Name | Description |
|---|---|
| GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>, IEqualityComparer<TKey>) |
Grupperar elementen i en sekvens enligt en angiven nyckelväljare och skapar ett resultatvärde från varje grupp och dess nyckel. Nycklar jämförs med en angiven jämförelse och elementen i varje grupp projiceras med hjälp av en angiven funktion. |
| GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>) |
Grupperar elementen i en sekvens enligt en angiven nyckelväljare och skapar ett resultatvärde från varje grupp och dess nyckel. Elementen i varje grupp projiceras med hjälp av en angiven funktion. |
| GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>) |
Grupperar elementen i en sekvens enligt en angiven nyckelväljare och projicerar elementen för varje grupp med hjälp av en angiven funktion. |
| GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, IEqualityComparer<TKey>) |
Grupperar elementen i en sekvens och projicerar elementen för varje grupp med hjälp av en angiven funktion. Nyckelvärden jämförs med en angiven jämförelse. |
| GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>) |
Grupperar elementen i en sekvens enligt en angiven nyckelväljare och skapar ett resultatvärde från varje grupp och dess nyckel. |
| GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>, IEqualityComparer<TKey>) |
Grupperar elementen i en sekvens enligt en angiven nyckelväljare och skapar ett resultatvärde från varje grupp och dess nyckel. Nycklar jämförs med en angiven jämförelse. |
| GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IEqualityComparer<TKey>) |
Grupperar elementen i en sekvens enligt en angiven nyckelväljare och jämför nycklarna med hjälp av en angiven jämförelse. |
| GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) |
Grupperar elementen i en sekvens enligt en angiven nyckelväljare. |
GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>, IEqualityComparer<TKey>)
Grupperar elementen i en sekvens enligt en angiven nyckelväljare och skapar ett resultatvärde från varje grupp och dess nyckel. Nycklar jämförs med en angiven jämförelse och elementen i varje grupp projiceras med hjälp av en angiven funktion.
public:
generic <typename TSource, typename TKey, typename TElement, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Linq::IQueryable<TResult> ^ GroupBy(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector, System::Linq::Expressions::Expression<Func<TSource, TElement> ^> ^ elementSelector, System::Linq::Expressions::Expression<Func<TKey, System::Collections::Generic::IEnumerable<TElement> ^, TResult> ^> ^ resultSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TElement,TResult>(this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TElement>,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
static member GroupBy : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> * System.Linq.Expressions.Expression<Func<'Source, 'Element>> * System.Linq.Expressions.Expression<Func<'Key, seq<'Element>, 'Result>> * System.Collections.Generic.IEqualityComparer<'Key> -> System.Linq.IQueryable<'Result>
<Extension()>
Public Function GroupBy(Of TSource, TKey, TElement, TResult) (source As IQueryable(Of TSource), keySelector As Expression(Of Func(Of TSource, TKey)), elementSelector As Expression(Of Func(Of TSource, TElement)), resultSelector As Expression(Of Func(Of TKey, IEnumerable(Of TElement), TResult)), comparer As IEqualityComparer(Of TKey)) As IQueryable(Of TResult)
Typparametrar
- TSource
Typen av element sourcei .
- TKey
Typen av nyckel som returneras av funktionen som representeras i keySelector.
- TElement
Typ av element i varje IGrouping<TKey,TElement>.
- TResult
Typ av resultatvärde som returneras av resultSelector.
Parametrar
- source
- IQueryable<TSource>
Ett IQueryable<T> vars element ska grupperas.
- keySelector
- Expression<Func<TSource,TKey>>
En funktion för att extrahera nyckeln för varje element.
- elementSelector
- Expression<Func<TSource,TElement>>
En funktion för att mappa varje källelement till ett element i en IGrouping<TKey,TElement>.
- resultSelector
- Expression<Func<TKey,IEnumerable<TElement>,TResult>>
En funktion för att skapa ett resultatvärde från varje grupp.
- comparer
- IEqualityComparer<TKey>
En IEqualityComparer<T> för att jämföra nycklar.
Returer
En T:System.Linq.IQueryable`1 som har ett typargument för TResult och där varje element representerar en projektion över en grupp och dess nyckel.
Undantag
source eller keySelector eller elementSelector eller resultSelectorcomparer är null.
Kommentarer
Den här metoden har minst en parameter av typen Expression<TDelegate> vars typargument är en av typerna Func<T,TResult> . För dessa parametrar kan du skicka ett lambda-uttryck och kompileras till en Expression<TDelegate>.
Metoden GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource,
TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey,
IEnumerable<TElement>,TResult>>, IEqualityComparer<TKey>) genererar en MethodCallExpression som representerar att anropa GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource,
TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey,
IEnumerable<TElement>,TResult>>, IEqualityComparer<TKey>) sig själv som en konstruerad generisk metod. Den skickar sedan till CreateQuery<TElement>(Expression) metoden för den IQueryProvider som representeras av Provider egenskapen för parameternsource.MethodCallExpression
Frågebeteendet som uppstår till följd av att ett uttrycksträd som representerar anrop GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource,
TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey,
IEnumerable<TElement>,TResult>>, IEqualityComparer<TKey>) körs beror på implementeringen av source parametertypen. Det förväntade beteendet är att det grupperar elementen source i efter nyckelvärden som hämtas genom att keySelector anropa på varje element. Parametern comparer används för att jämföra nyckelvärden. Parametern elementSelector används för att projicera elementen i varje grupp och parametern resultSelector används för att hämta ett resultatvärde från varje grupp och dess nyckel.
Gäller för
GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>)
Grupperar elementen i en sekvens enligt en angiven nyckelväljare och skapar ett resultatvärde från varje grupp och dess nyckel. Elementen i varje grupp projiceras med hjälp av en angiven funktion.
public:
generic <typename TSource, typename TKey, typename TElement, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Linq::IQueryable<TResult> ^ GroupBy(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector, System::Linq::Expressions::Expression<Func<TSource, TElement> ^> ^ elementSelector, System::Linq::Expressions::Expression<Func<TKey, System::Collections::Generic::IEnumerable<TElement> ^, TResult> ^> ^ resultSelector);
public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TElement,TResult>(this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TElement>,TResult>> resultSelector);
static member GroupBy : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> * System.Linq.Expressions.Expression<Func<'Source, 'Element>> * System.Linq.Expressions.Expression<Func<'Key, seq<'Element>, 'Result>> -> System.Linq.IQueryable<'Result>
<Extension()>
Public Function GroupBy(Of TSource, TKey, TElement, TResult) (source As IQueryable(Of TSource), keySelector As Expression(Of Func(Of TSource, TKey)), elementSelector As Expression(Of Func(Of TSource, TElement)), resultSelector As Expression(Of Func(Of TKey, IEnumerable(Of TElement), TResult))) As IQueryable(Of TResult)
Typparametrar
- TSource
Typen av element sourcei .
- TKey
Typen av nyckel som returneras av funktionen som representeras i keySelector.
- TElement
Typ av element i varje IGrouping<TKey,TElement>.
- TResult
Typ av resultatvärde som returneras av resultSelector.
Parametrar
- source
- IQueryable<TSource>
Ett IQueryable<T> vars element ska grupperas.
- keySelector
- Expression<Func<TSource,TKey>>
En funktion för att extrahera nyckeln för varje element.
- elementSelector
- Expression<Func<TSource,TElement>>
En funktion för att mappa varje källelement till ett element i en IGrouping<TKey,TElement>.
- resultSelector
- Expression<Func<TKey,IEnumerable<TElement>,TResult>>
En funktion för att skapa ett resultatvärde från varje grupp.
Returer
En T:System.Linq.IQueryable`1 som har ett typargument för TResult och där varje element representerar en projektion över en grupp och dess nyckel.
Undantag
source eller keySelector eller elementSelectorresultSelector är null.
Exempel
Följande kodexempel visar hur du använder GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource,
TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey,
IEnumerable<TElement>,TResult>>) för att gruppera elementen i en sekvens och projicera en resultatsekvens av typen TResult.
class Pet
{
public string Name { get; set; }
public double Age { get; set; }
}
public static void GroupByEx4()
{
// Create a list of pets.
List<Pet> petsList =
new List<Pet>{ new Pet { Name="Barley", Age=8.3 },
new Pet { Name="Boots", Age=4.9 },
new Pet { Name="Whiskers", Age=1.5 },
new Pet { Name="Daisy", Age=4.3 } };
// Group Pet.Age values by the Math.Floor of the age.
// Then project an anonymous type from each group
// that consists of the key, the count of the group's
// elements, and the minimum and maximum age in the group.
var query = petsList.AsQueryable().GroupBy(
pet => Math.Floor(pet.Age),
pet => pet.Age,
(baseAge, ages) => new
{
Key = baseAge,
Count = ages.Count(),
Min = ages.Min(),
Max = ages.Max()
});
// Iterate over each anonymous type.
foreach (var result in query)
{
Console.WriteLine("\nAge group: " + result.Key);
Console.WriteLine("Number of pets in this age group: " + result.Count);
Console.WriteLine("Minimum age: " + result.Min);
Console.WriteLine("Maximum age: " + result.Max);
}
/* This code produces the following output:
Age group: 8
Number of pets in this age group: 1
Minimum age: 8.3
Maximum age: 8.3
Age group: 4
Number of pets in this age group: 2
Minimum age: 4.3
Maximum age: 4.9
Age group: 1
Number of pets in this age group: 1
Minimum age: 1.5
Maximum age: 1.5
*/
}
Structure Pet
Public Name As String
Public Age As Double
End Structure
Shared Sub GroupByEx4()
' Create a list of pets.
Dim petsList As New List(Of Pet)(New Pet() { _
New Pet With {.Name = "Barley", .Age = 8.3}, _
New Pet With {.Name = "Boots", .Age = 4.9}, _
New Pet With {.Name = "Whiskers", .Age = 1.5}, _
New Pet With {.Name = "Daisy", .Age = 4.3}})
' Group Pet.Age valuesby the Math.Floor of the age.
' Then project an anonymous type from each group
' that consists of the key, the count of the group's
' elements, and the minimum and maximum age in the group.
Dim query = petsList.AsQueryable().GroupBy( _
Function(pet) Math.Floor(pet.Age), _
Function(pet) pet.Age, _
Function(baseAge, ages) New With { _
.Key = baseAge, _
.Count = ages.Count(), _
.Min = ages.Min(), _
.Max = ages.Max() _
})
Dim output As New System.Text.StringBuilder
' Iterate over each anonymous type.
For Each result In query
output.AppendLine(vbCrLf & "Age group: " & result.Key)
output.AppendLine("Number of pets with this age: " & result.Count)
output.AppendLine("Minimum age: " & result.Min)
output.AppendLine("Maximum age: " & result.Max)
Next
' Display the output.
MsgBox(output.ToString())
' This code produces the following output:
' Age group: 8
' Number of pets with this age: 1
' Minimum age: 8.3
' Maximum age: 8.3
' Age group: 4
' Number of pets with this age: 2
' Minimum age: 4.3
' Maximum age: 4.9
' Age group: 1
' Number of pets with this age: 1
' Minimum age: 1.5
' Maximum age: 1.5
End Sub
Kommentarer
Den här metoden har minst en parameter av typen Expression<TDelegate> vars typargument är en av typerna Func<T,TResult> . För dessa parametrar kan du skicka ett lambda-uttryck och kompileras till en Expression<TDelegate>.
Metoden GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource,
TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey,
IEnumerable<TElement>,TResult>>) genererar en MethodCallExpression som representerar att anropa GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource,
TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey,
IEnumerable<TElement>,TResult>>) sig själv som en konstruerad generisk metod. Den skickar sedan till CreateQuery<TElement>(Expression) metoden för den IQueryProvider som representeras av Provider egenskapen för parameternsource.MethodCallExpression
Frågebeteendet som uppstår till följd av att ett uttrycksträd som representerar anrop GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource,
TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey,
IEnumerable<TElement>,TResult>>) körs beror på implementeringen av source parametertypen. Det förväntade beteendet är att det grupperar elementen source i efter nyckelvärden som hämtas genom att keySelector anropa på varje element. Parametern elementSelector används för att projicera elementen i varje grupp och parametern resultSelector används för att hämta ett resultatvärde från varje grupp och dess nyckel.
Gäller för
GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>)
Grupperar elementen i en sekvens enligt en angiven nyckelväljare och projicerar elementen för varje grupp med hjälp av en angiven funktion.
public:
generic <typename TSource, typename TKey, typename TElement>
[System::Runtime::CompilerServices::Extension]
static System::Linq::IQueryable<System::Linq::IGrouping<TKey, TElement> ^> ^ GroupBy(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector, System::Linq::Expressions::Expression<Func<TSource, TElement> ^> ^ elementSelector);
public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TElement>> GroupBy<TSource,TKey,TElement>(this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector);
static member GroupBy : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> * System.Linq.Expressions.Expression<Func<'Source, 'Element>> -> System.Linq.IQueryable<System.Linq.IGrouping<'Key, 'Element>>
<Extension()>
Public Function GroupBy(Of TSource, TKey, TElement) (source As IQueryable(Of TSource), keySelector As Expression(Of Func(Of TSource, TKey)), elementSelector As Expression(Of Func(Of TSource, TElement))) As IQueryable(Of IGrouping(Of TKey, TElement))
Typparametrar
- TSource
Typen av element sourcei .
- TKey
Typen av nyckel som returneras av funktionen som representeras i keySelector.
- TElement
Typ av element i varje IGrouping<TKey,TElement>.
Parametrar
- source
- IQueryable<TSource>
Ett IQueryable<T> vars element ska grupperas.
- keySelector
- Expression<Func<TSource,TKey>>
En funktion för att extrahera nyckeln för varje element.
- elementSelector
- Expression<Func<TSource,TElement>>
En funktion för att mappa varje källelement till ett element i en IGrouping<TKey,TElement>.
Returer
En IQueryable<IGrouping<TKey, TElement>> i C# eller IQueryable(Of IGrouping(Of TKey, TElement)) i Visual Basic där varje IGrouping<TKey,TElement> innehåller en sekvens med objekt av typen TElement och en nyckel.
Undantag
source eller keySelector är elementSelectornull.
Exempel
Följande kodexempel visar hur du använder GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>) för att gruppera elementen i en sekvens.
class Pet
{
public string Name { get; set; }
public int Age { get; set; }
}
public static void GroupByEx2()
{
// Create a list of Pet objects.
List<Pet> pets =
new List<Pet>{ new Pet { Name="Barley", Age=8 },
new Pet { Name="Boots", Age=4 },
new Pet { Name="Whiskers", Age=1 },
new Pet { Name="Daisy", Age=4 } };
// Group the pets using Pet.Age as the key.
// Use Pet.Name as the value for each entry.
IEnumerable<IGrouping<int, string>> query =
pets.AsQueryable().GroupBy(pet => pet.Age, pet => pet.Name);
// Iterate over each IGrouping in the collection.
foreach (IGrouping<int, string> petGroup in query)
{
// Print the key value of the IGrouping.
Console.WriteLine(petGroup.Key);
// Iterate over each value in the
// IGrouping and print the value.
foreach (string name in petGroup)
Console.WriteLine(" {0}", name);
}
}
/*
This code produces the following output:
8
Barley
4
Boots
Daisy
1
Whiskers
*/
Structure Pet
Public Name As String
Public Age As Integer
End Structure
Shared Sub GroupByEx2()
' Create a list of Pet objects.
Dim pets As New List(Of Pet)(New Pet() { _
New Pet With {.Name = "Barley", .Age = 8}, _
New Pet With {.Name = "Boots", .Age = 4}, _
New Pet With {.Name = "Whiskers", .Age = 1}, _
New Pet With {.Name = "Daisy", .Age = 4}})
' Group the pets using Pet.Age as the key.
' Use Pet.Name as the value for each entry.
Dim query As IEnumerable(Of IGrouping(Of Integer, String)) = _
pets.AsQueryable().GroupBy(Function(pet) pet.Age, Function(pet) pet.Name)
Dim output As New System.Text.StringBuilder
' Iterate over each IGrouping in the collection.
For Each petGroup As IGrouping(Of Integer, String) In query
' Print the key value of the IGrouping.
output.AppendLine(petGroup.Key)
' Iterate over each value in the
' IGrouping and print the value.
For Each name As String In petGroup
output.AppendLine(String.Format(" {0}", name))
Next
Next
' Display the output.
MsgBox(output.ToString())
End Sub
' This code produces the following output:
'
' 8
' Barley
' 4
' Boots
' Daisy
' 1
' Whiskers
Kommentarer
Den här metoden har minst en parameter av typen Expression<TDelegate> vars typargument är en av typerna Func<T,TResult> . För dessa parametrar kan du skicka ett lambda-uttryck och kompileras till en Expression<TDelegate>.
Metoden GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>) genererar en MethodCallExpression som representerar att anropa GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>) sig själv som en konstruerad generisk metod. Den skickar sedan till CreateQuery<TElement>(Expression) metoden för den IQueryProvider som representeras av Provider egenskapen för parameternsource.MethodCallExpression
Frågebeteendet som uppstår till följd av att ett uttrycksträd som representerar anrop GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>) körs beror på implementeringen av source parametertypen. Det förväntade beteendet är att det grupperar elementen source i efter ett nyckelvärde som hämtas genom att keySelector anropa varje element. Den anropar elementSelector på varje element för att hämta ett resultatelement.
Gäller för
GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, IEqualityComparer<TKey>)
Grupperar elementen i en sekvens och projicerar elementen för varje grupp med hjälp av en angiven funktion. Nyckelvärden jämförs med en angiven jämförelse.
public:
generic <typename TSource, typename TKey, typename TElement>
[System::Runtime::CompilerServices::Extension]
static System::Linq::IQueryable<System::Linq::IGrouping<TKey, TElement> ^> ^ GroupBy(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector, System::Linq::Expressions::Expression<Func<TSource, TElement> ^> ^ elementSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TElement>> GroupBy<TSource,TKey,TElement>(this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
static member GroupBy : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> * System.Linq.Expressions.Expression<Func<'Source, 'Element>> * System.Collections.Generic.IEqualityComparer<'Key> -> System.Linq.IQueryable<System.Linq.IGrouping<'Key, 'Element>>
<Extension()>
Public Function GroupBy(Of TSource, TKey, TElement) (source As IQueryable(Of TSource), keySelector As Expression(Of Func(Of TSource, TKey)), elementSelector As Expression(Of Func(Of TSource, TElement)), comparer As IEqualityComparer(Of TKey)) As IQueryable(Of IGrouping(Of TKey, TElement))
Typparametrar
- TSource
Typen av element sourcei .
- TKey
Typen av nyckel som returneras av funktionen som representeras i keySelector.
- TElement
Typ av element i varje IGrouping<TKey,TElement>.
Parametrar
- source
- IQueryable<TSource>
Ett IQueryable<T> vars element ska grupperas.
- keySelector
- Expression<Func<TSource,TKey>>
En funktion för att extrahera nyckeln för varje element.
- elementSelector
- Expression<Func<TSource,TElement>>
En funktion för att mappa varje källelement till ett element i en IGrouping<TKey,TElement>.
- comparer
- IEqualityComparer<TKey>
En IEqualityComparer<T> för att jämföra nycklar.
Returer
En IQueryable<IGrouping<TKey, TElement>> i C# eller IQueryable(Of IGrouping(Of TKey, TElement)) i Visual Basic där varje IGrouping<TKey,TElement> innehåller en sekvens med objekt av typen TElement och en nyckel.
Undantag
source eller keySelector eller elementSelectorcomparer är null.
Kommentarer
Den här metoden har minst en parameter av typen Expression<TDelegate> vars typargument är en av typerna Func<T,TResult> . För dessa parametrar kan du skicka ett lambda-uttryck och kompileras till en Expression<TDelegate>.
Metoden GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, IEqualityComparer<TKey>) genererar en MethodCallExpression som representerar att anropa GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, IEqualityComparer<TKey>) sig själv som en konstruerad generisk metod. Den skickar sedan till CreateQuery<TElement>(Expression) metoden för den IQueryProvider som representeras av Provider egenskapen för parameternsource.MethodCallExpression
Frågebeteendet som uppstår till följd av att ett uttrycksträd som representerar anrop GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, IEqualityComparer<TKey>) körs beror på implementeringen av source parametertypen. Det förväntade beteendet är att det grupperar elementen source i efter ett nyckelvärde som hämtas genom att keySelector anropa varje element. Nyckelvärden jämförs med hjälp comparerav . Parametern elementSelector anropas på varje element för att hämta ett resultatelement.
Gäller för
GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>)
Grupperar elementen i en sekvens enligt en angiven nyckelväljare och skapar ett resultatvärde från varje grupp och dess nyckel.
public:
generic <typename TSource, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Linq::IQueryable<TResult> ^ GroupBy(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector, System::Linq::Expressions::Expression<Func<TKey, System::Collections::Generic::IEnumerable<TSource> ^, TResult> ^> ^ resultSelector);
public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TResult>(this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TSource>,TResult>> resultSelector);
static member GroupBy : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> * System.Linq.Expressions.Expression<Func<'Key, seq<'Source>, 'Result>> -> System.Linq.IQueryable<'Result>
<Extension()>
Public Function GroupBy(Of TSource, TKey, TResult) (source As IQueryable(Of TSource), keySelector As Expression(Of Func(Of TSource, TKey)), resultSelector As Expression(Of Func(Of TKey, IEnumerable(Of TSource), TResult))) As IQueryable(Of TResult)
Typparametrar
- TSource
Typen av element sourcei .
- TKey
Typen av nyckel som returneras av funktionen som representeras i keySelector.
- TResult
Typ av resultatvärde som returneras av resultSelector.
Parametrar
- source
- IQueryable<TSource>
Ett IQueryable<T> vars element ska grupperas.
- keySelector
- Expression<Func<TSource,TKey>>
En funktion för att extrahera nyckeln för varje element.
- resultSelector
- Expression<Func<TKey,IEnumerable<TSource>,TResult>>
En funktion för att skapa ett resultatvärde från varje grupp.
Returer
En T:System.Linq.IQueryable`1 som har ett typargument för TResult och där varje element representerar en projektion över en grupp och dess nyckel.
Undantag
source eller keySelector är resultSelectornull.
Exempel
Följande kodexempel visar hur du använder GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>) för att gruppera elementen i en sekvens och projicera en resultatsekvens av typen TResult.
class Pet
{
public string Name { get; set; }
public double Age { get; set; }
}
public static void GroupByEx3()
{
// Create a list of pets.
List<Pet> petsList =
new List<Pet>{ new Pet { Name="Barley", Age=8.3 },
new Pet { Name="Boots", Age=4.9 },
new Pet { Name="Whiskers", Age=1.5 },
new Pet { Name="Daisy", Age=4.3 } };
// Group Pet objects by the Math.Floor of their age.
// Then project an anonymous type from each group
// that consists of the key, the count of the group's
// elements, and the minimum and maximum age in the group.
var query = petsList.AsQueryable().GroupBy(
pet => Math.Floor(pet.Age),
(age, pets) => new
{
Key = age,
Count = pets.Count(),
Min = pets.Min(pet => pet.Age),
Max = pets.Max(pet => pet.Age)
});
// Iterate over each anonymous type.
foreach (var result in query)
{
Console.WriteLine("\nAge group: " + result.Key);
Console.WriteLine("Number of pets in this age group: " + result.Count);
Console.WriteLine("Minimum age: " + result.Min);
Console.WriteLine("Maximum age: " + result.Max);
}
/* This code produces the following output:
Age group: 8
Number of pets in this age group: 1
Minimum age: 8.3
Maximum age: 8.3
Age group: 4
Number of pets in this age group: 2
Minimum age: 4.3
Maximum age: 4.9
Age group: 1
Number of pets in this age group: 1
Minimum age: 1.5
Maximum age: 1.5
*/
}
Structure Pet
Public Name As String
Public Age As Double
End Structure
Shared Sub GroupByEx3()
' Create a list of pets.
Dim petsList As New List(Of Pet)(New Pet() { _
New Pet With {.Name = "Barley", .Age = 8.3}, _
New Pet With {.Name = "Boots", .Age = 4.9}, _
New Pet With {.Name = "Whiskers", .Age = 1.5}, _
New Pet With {.Name = "Daisy", .Age = 4.3}})
' Group Pet objects by the Math.Floor of their age.
' Then project an anonymous type from each group
' that consists of the key, the count of the group's
' elements, and the minimum and maximum age in the group.
Dim query = petsList.AsQueryable().GroupBy( _
Function(pet) Math.Floor(pet.Age), _
Function(age, pets) New With { _
.Key = age, _
.Count = pets.Count(), _
.Min = pets.Min(Function(pet) pet.Age), _
.Max = pets.Max(Function(pet) pet.Age) _
})
Dim output As New System.Text.StringBuilder
' Iterate over each anonymous type.
For Each result In query
output.AppendLine(vbCrLf & "Age group: " & result.Key)
output.AppendLine("Number of pets with this age: " & result.Count)
output.AppendLine("Minimum age: " & result.Min)
output.AppendLine("Maximum age: " & result.Max)
Next
' Display the output.
MsgBox(output.ToString())
' This code produces the following output:
' Age group: 8
' Number of pets with this age: 1
' Minimum age: 8.3
' Maximum age: 8.3
' Age group: 4
' Number of pets with this age: 2
' Minimum age: 4.3
' Maximum age: 4.9
' Age group: 1
' Number of pets with this age: 1
' Minimum age: 1.5
' Maximum age: 1.5
End Sub
Kommentarer
Den här metoden har minst en parameter av typen Expression<TDelegate> vars typargument är en av typerna Func<T,TResult> . För dessa parametrar kan du skicka ett lambda-uttryck och kompileras till en Expression<TDelegate>.
Metoden GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>) genererar en MethodCallExpression som representerar att anropa GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>) sig själv som en konstruerad generisk metod. Den skickar sedan till CreateQuery<TElement>(Expression) metoden för den IQueryProvider som representeras av Provider egenskapen för parameternsource.MethodCallExpression
Frågebeteendet som uppstår till följd av att ett uttrycksträd som representerar anrop GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>) körs beror på implementeringen av source parametertypen. Det förväntade beteendet är att det grupperar elementen source i efter ett nyckelvärde som hämtas genom att keySelector anropa varje element. Parametern resultSelector används för att hämta ett resultatvärde från varje grupp och dess nyckel.
Gäller för
GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>, IEqualityComparer<TKey>)
Grupperar elementen i en sekvens enligt en angiven nyckelväljare och skapar ett resultatvärde från varje grupp och dess nyckel. Nycklar jämförs med en angiven jämförelse.
public:
generic <typename TSource, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Linq::IQueryable<TResult> ^ GroupBy(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector, System::Linq::Expressions::Expression<Func<TKey, System::Collections::Generic::IEnumerable<TSource> ^, TResult> ^> ^ resultSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TResult>(this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TSource>,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
static member GroupBy : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> * System.Linq.Expressions.Expression<Func<'Key, seq<'Source>, 'Result>> * System.Collections.Generic.IEqualityComparer<'Key> -> System.Linq.IQueryable<'Result>
<Extension()>
Public Function GroupBy(Of TSource, TKey, TResult) (source As IQueryable(Of TSource), keySelector As Expression(Of Func(Of TSource, TKey)), resultSelector As Expression(Of Func(Of TKey, IEnumerable(Of TSource), TResult)), comparer As IEqualityComparer(Of TKey)) As IQueryable(Of TResult)
Typparametrar
- TSource
Typen av element sourcei .
- TKey
Typen av nyckel som returneras av funktionen som representeras i keySelector.
- TResult
Typ av resultatvärde som returneras av resultSelector.
Parametrar
- source
- IQueryable<TSource>
Ett IQueryable<T> vars element ska grupperas.
- keySelector
- Expression<Func<TSource,TKey>>
En funktion för att extrahera nyckeln för varje element.
- resultSelector
- Expression<Func<TKey,IEnumerable<TSource>,TResult>>
En funktion för att skapa ett resultatvärde från varje grupp.
- comparer
- IEqualityComparer<TKey>
En IEqualityComparer<T> för att jämföra nycklar.
Returer
En T:System.Linq.IQueryable`1 som har ett typargument för TResult och där varje element representerar en projektion över en grupp och dess nyckel.
Undantag
source eller keySelector eller resultSelectorcomparer är null.
Kommentarer
Den här metoden har minst en parameter av typen Expression<TDelegate> vars typargument är en av typerna Func<T,TResult> . För dessa parametrar kan du skicka ett lambda-uttryck och kompileras till en Expression<TDelegate>.
Metoden GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,
TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>, IEqualityComparer<TKey>) genererar en MethodCallExpression som representerar att anropa GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,
TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>, IEqualityComparer<TKey>) sig själv som en konstruerad generisk metod. Den skickar sedan till CreateQuery<TElement>(Expression) metoden för den IQueryProvider som representeras av Provider egenskapen för parameternsource.MethodCallExpression
Frågebeteendet som uppstår till följd av att ett uttrycksträd som representerar anrop GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,
TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>, IEqualityComparer<TKey>) körs beror på implementeringen av source parametertypen. Det förväntade beteendet är att det grupperar elementen source i efter nyckelvärden som hämtas genom att keySelector anropa på varje element. Parametern comparer används för att jämföra nycklar och parametern resultSelector används för att hämta ett resultatvärde från varje grupp och dess nyckel.
Gäller för
GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IEqualityComparer<TKey>)
Grupperar elementen i en sekvens enligt en angiven nyckelväljare och jämför nycklarna med hjälp av en angiven jämförelse.
public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
static System::Linq::IQueryable<System::Linq::IGrouping<TKey, TSource> ^> ^ GroupBy(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TSource>> GroupBy<TSource,TKey>(this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
static member GroupBy : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> * System.Collections.Generic.IEqualityComparer<'Key> -> System.Linq.IQueryable<System.Linq.IGrouping<'Key, 'Source>>
<Extension()>
Public Function GroupBy(Of TSource, TKey) (source As IQueryable(Of TSource), keySelector As Expression(Of Func(Of TSource, TKey)), comparer As IEqualityComparer(Of TKey)) As IQueryable(Of IGrouping(Of TKey, TSource))
Typparametrar
- TSource
Typen av element sourcei .
- TKey
Typen av nyckel som returneras av funktionen som representeras i keySelector.
Parametrar
- source
- IQueryable<TSource>
Ett IQueryable<T> vars element ska grupperas.
- keySelector
- Expression<Func<TSource,TKey>>
En funktion för att extrahera nyckeln för varje element.
- comparer
- IEqualityComparer<TKey>
En IEqualityComparer<T> för att jämföra nycklar.
Returer
En IQueryable<IGrouping<TKey, TSource>> i C# eller IQueryable(Of IGrouping(Of TKey, TSource)) i Visual Basic där varje IGrouping<TKey,TElement> innehåller en sekvens med objekt och en nyckel.
Undantag
source eller keySelector är comparernull.
Kommentarer
Den här metoden har minst en parameter av typen Expression<TDelegate> vars typargument är en av typerna Func<T,TResult> . För dessa parametrar kan du skicka ett lambda-uttryck och kompileras till en Expression<TDelegate>.
Metoden GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IEqualityComparer<TKey>) genererar en MethodCallExpression som representerar att anropa GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IEqualityComparer<TKey>) sig själv som en konstruerad generisk metod. Den skickar sedan till CreateQuery<TElement>(Expression) metoden för den IQueryProvider som representeras av Provider egenskapen för parameternsource.MethodCallExpression
Frågebeteendet som uppstår till följd av att ett uttrycksträd som representerar anrop GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IEqualityComparer<TKey>) körs beror på implementeringen av source parametertypen. Det förväntade beteendet är att det grupperar elementen source i efter ett nyckelvärde. Nyckelvärdet hämtas genom att keySelector anropa på varje element och nyckelvärden jämförs med hjälp comparerav .
Gäller för
GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>)
Grupperar elementen i en sekvens enligt en angiven nyckelväljare.
public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
static System::Linq::IQueryable<System::Linq::IGrouping<TKey, TSource> ^> ^ GroupBy(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector);
public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TSource>> GroupBy<TSource,TKey>(this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector);
static member GroupBy : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> -> System.Linq.IQueryable<System.Linq.IGrouping<'Key, 'Source>>
<Extension()>
Public Function GroupBy(Of TSource, TKey) (source As IQueryable(Of TSource), keySelector As Expression(Of Func(Of TSource, TKey))) As IQueryable(Of IGrouping(Of TKey, TSource))
Typparametrar
- TSource
Typen av element sourcei .
- TKey
Typen av nyckel som returneras av funktionen som representeras i keySelector.
Parametrar
- source
- IQueryable<TSource>
Ett IQueryable<T> vars element ska grupperas.
- keySelector
- Expression<Func<TSource,TKey>>
En funktion för att extrahera nyckeln för varje element.
Returer
En IQueryable<IGrouping<TKey, TSource>> i C# eller IQueryable(Of IGrouping(Of TKey, TSource)) i Visual Basic där varje IGrouping<TKey,TElement>-objekt innehåller en sekvens med objekt och en nyckel.
Undantag
source eller keySelector är null.
Exempel
Följande kodexempel visar hur du använder GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) för att gruppera elementen i en sekvens.
class Pet
{
public string Name { get; set; }
public int Age { get; set; }
}
public static void GroupByEx1()
{
// Create a list of Pet objects.
List<Pet> pets =
new List<Pet>{ new Pet { Name="Barley", Age=8 },
new Pet { Name="Boots", Age=4 },
new Pet { Name="Whiskers", Age=1 },
new Pet { Name="Daisy", Age=4 } };
// Group the pets using Pet.Age as the key.
// Use Pet.Name as the value for each entry.
var query = pets.AsQueryable().GroupBy(pet => pet.Age);
// Iterate over each IGrouping in the collection.
foreach (var ageGroup in query)
{
Console.WriteLine("Age group: {0} Number of pets: {1}", ageGroup.Key, ageGroup.Count());
}
}
/*
This code produces the following output:
Age group: 8 Number of pets: 1
Age group: 4 Number of pets: 2
Age group: 1 Number of pets: 1
*/
Structure Pet
Public Name As String
Public Age As Integer
End Structure
Shared Sub GroupByEx1()
' Create a list of Pet objects.
Dim pets As New List(Of Pet)(New Pet() { _
New Pet With {.Name = "Barley", .Age = 8}, _
New Pet With {.Name = "Boots", .Age = 4}, _
New Pet With {.Name = "Whiskers", .Age = 1}, _
New Pet With {.Name = "Daisy", .Age = 4}})
' Group the pets using Pet.Age as the key.
' Use Pet.Name as the value for each entry.
Dim query = pets.AsQueryable().GroupBy(Function(pet) pet.Age)
Dim output As New System.Text.StringBuilder
' Iterate over each IGrouping in the collection.
For Each ageGroup In query
output.AppendFormat("Age group: {0} Number of pets: {1}{2}", ageGroup.Key, ageGroup.Count(), vbCrLf)
Next
' Display the output.
MsgBox(output.ToString())
End Sub
' This code produces the following output:
'
' Age group: 8 Number of pets: 1
' Age group: 4 Number of pets: 2
' Age group: 1 Number of pets: 1
Kommentarer
Den här metoden har minst en parameter av typen Expression<TDelegate> vars typargument är en av typerna Func<T,TResult> . För dessa parametrar kan du skicka ett lambda-uttryck och kompileras till en Expression<TDelegate>.
Metoden GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) genererar en MethodCallExpression som representerar att anropa GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) sig själv som en konstruerad generisk metod. Den skickar sedan till CreateQuery<TElement>(Expression) metoden för den IQueryProvider som representeras av Provider egenskapen för parameternsource.MethodCallExpression
Frågebeteendet som uppstår till följd av att ett uttrycksträd som representerar anrop GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) körs beror på implementeringen av source parametertypen. Det förväntade beteendet är att det grupperar elementen source i efter ett nyckelvärde som hämtas genom att keySelector anropa varje element.