Standaardqueryoperators aan elkaar koppelen (C#) (LINQ naar XML)
De standaardqueryoperators kunnen aan elkaar worden gekoppeld. U kunt bijvoorbeeld de Enumerable.Where operator onderwerpen (aangeroepen door de where
component) en werkt op een luie manier; dat wil gezegd dat er geen tussenliggende resultaten worden gerealiseerd.
Voorbeeld: Een where-component onderwerpen
In dit voorbeeld wordt de Where methode aangeroepen voordat u aanroept ConvertCollectionToUpperCase
. De Where methode werkt op bijna exact dezelfde manier als de luie methoden die in eerdere voorbeelden in deze zelfstudie worden gebruikt, ConvertCollectionToUpperCase
en AppendString
.
Een verschil is dat in dit geval de methode door de Where bronverzameling wordt herhaald, bepaalt dat het eerste item het predicaat niet doorgeeft en vervolgens het volgende item krijgt dat wel doorgaat. Het levert vervolgens het tweede item op.
Het basisidee is echter hetzelfde: tussenliggende verzamelingen worden niet gerealiseerd, tenzij ze moeten zijn.
Wanneer query-expressies worden gebruikt, worden ze geconverteerd naar aanroepen naar de standaardqueryoperators en zijn dezelfde principes van toepassing.
In alle voorbeelden in deze sectie waarin een query wordt uitgevoerd op Office Open XML-documenten, wordt hetzelfde principe gebruikt. Uitgestelde uitvoering en luie evaluatie zijn enkele van de fundamentele concepten die u moet begrijpen om LINQ en LINQ te gebruiken voor XML, effectief.
public static class LocalExtensions
{
public static IEnumerable<string>
ConvertCollectionToUpperCase(this IEnumerable<string> source)
{
foreach (string str in source)
{
Console.WriteLine("ToUpper: source >{0}<", str);
yield return str.ToUpper();
}
}
public static IEnumerable<string>
AppendString(this IEnumerable<string> source, string stringToAppend)
{
foreach (string str in source)
{
Console.WriteLine("AppendString: source >{0}<", str);
yield return str + stringToAppend;
}
}
}
class Program
{
static void Main(string[] args)
{
string[] stringArray = { "abc", "def", "ghi" };
IEnumerable<string> q1 =
from s in stringArray.ConvertCollectionToUpperCase()
where s.CompareTo("D") >= 0
select s;
IEnumerable<string> q2 =
from s in q1.AppendString("!!!")
select s;
foreach (string str in q2)
{
Console.WriteLine("Main: str >{0}<", str);
Console.WriteLine();
}
}
}
In dit voorbeeld wordt de volgende uitvoer gegenereerd:
ToUpper: source >abc<
ToUpper: source >def<
AppendString: source >DEF<
Main: str >DEF!!!<
ToUpper: source >ghi<
AppendString: source >GHI<
Main: str >GHI!!!<
Dit is het laatste artikel in de zelfstudie: Query's aan elkaar koppelen (C#).