Skriva frågor i C# LINQ

Skriva Fragor I C Linq



I likhet med SQL är det möjligt att skriva frågor i C# LINQ med hjälp av frågesyntaxen. Dessa frågor används i C#-databasapplikationer på webben för att hämta data från databasen och visas på webben för tredje parts användare. I den här guiden kommer vi att diskutera några LINQ-frågor som liknar SQL. För detta skapar vi en listdatakälla och tillämpar frågorna i den.

Frågesyntax:

Låt oss titta på den generiska syntaxen:

från iterator i Datakälla
Välj iterator ;

Här:







  1. Data_Source kan vara listan som innehåller data.
  2. Iteratorn används för att hämta elementen från Data_Source.

Datakälla

I hela den här guiden kommer vi att använda följande lista med poster som en datakälla och alla frågor tillämpas endast på denna datakälla. Se till att du kör den här koden i din miljö och modifiera frågesatserna med följande exempel ett efter ett som vi ska diskutera:



använder sig av Systemet ;
använder sig av System.Collectioner.Generisk ;
använder sig av System.Linq ;
använder sig av System.Samlingar ;

offentlig klass Beräkningar
{
offentlig statisk tomhet Main ( )
{
// Listskapande
Lista land_priser = ny Lista ( ) {

// Lägg till 5 poster i listan
ny Priser ( ) { Artikel = 'frukter' ,plats = 'USA' , kvantitet = 100 , kostnad = 345,78 } ,
ny Priser ( ) { Artikel = 'Nötter' ,plats = 'Indien' , kvantitet = 200 , kostnad = 3645,78 } ,
ny Priser ( ) { Artikel = 'Andra' ,plats = 'STORBRITANNIEN' , kvantitet = 500 , kostnad = 90,68 } ,
ny Priser ( ) { Artikel = 'olja' ,plats = 'USA' , kvantitet = 100 , kostnad = 345,78 } ,
ny Priser ( ) { Artikel = 'Chili' ,plats = 'USA' , kvantitet = 10 , kostnad = 67,89 } ,
} ;


för varje ( var i i land_priser )
{
Trösta . Skrivlinje ( i . Artikel + ' ' + i . plats + ' ' + i . kvantitet + ' ' + i . kosta ) ;
}
}
}
offentlig klass Priser {
offentlig sträng Artikel { skaffa sig ; uppsättning ; }
offentlig sträng plats { skaffa sig ; uppsättning ; }
offentlig int kvantitet { skaffa sig ; uppsättning ; }
offentlig dubbel kosta { skaffa sig ; uppsättning ; }
}

Uppgifter:







Förklaring:

1. Skapa priserna med följande attribut:

2. Skapa en annan klass som är 'Calculations' med huvudmetod och skapa country_prices-listan med fem poster.



Välj

I grund och botten är 'select' en projektionsoperator som väljer attributen från den angivna datakällan. Frågan börjar med 'från'. Sedan anger vi iteratorn som itererar över datakällan. Sedan anges 'välj'-operatören.

Syntax:

Alla attribut: från iterator i Data_Source välj iterator;

Specifikt attribut: från iterator i Data_Source välj iterator.attribute;

Exempel 1:

Låt oss skriva en fråga för att välja alla poster från listan.

använder sig av Systemet ;
använder sig av System.Collectioner.Generisk ;
använder sig av System.Linq ;
använder sig av System.Samlingar ;

offentlig klass Beräkningar
{
offentlig statisk tomhet Main ( )
{
// Listskapande
Lista land_priser = ny Lista ( ) {

// Lägg till 5 poster i listan
ny Priser ( ) { Artikel = 'frukter' ,plats = 'USA' , kvantitet = 100 , kostnad = 345,78 } ,
ny Priser ( ) { Artikel = 'Nötter' ,plats = 'Indien' , kvantitet = 200 , kostnad = 3645,78 } ,
ny Priser ( ) { Artikel = 'Andra' ,plats = 'STORBRITANNIEN' , kvantitet = 500 , kostnad = 90,68 } ,
ny Priser ( ) { Artikel = 'olja' ,plats = 'USA' , kvantitet = 100 , kostnad = 345,78 } ,
ny Priser ( ) { Artikel = 'Chili' ,plats = 'USA' , kvantitet = 10 , kostnad = 67,89 } ,
} ;

//välj operator i frågan
var data = från i i land_priser
Välj i ;

för varje ( var i i data )
{
Trösta . Skrivlinje ( i . Artikel + ' ' + i . plats + ' ' + i . kvantitet + ' ' + i . kosta ) ;

}
}
}
offentlig klass Priser {
offentlig sträng Artikel { skaffa sig ; uppsättning ; }
offentlig sträng plats { skaffa sig ; uppsättning ; }
offentlig int kvantitet { skaffa sig ; uppsättning ; }
offentlig dubbel kosta { skaffa sig ; uppsättning ; }
}

Produktion:

Här har vi inte angett något attribut i 'select'-frågan. Vi hämtade alla attribut från frågan (data) inuti 'foreach'-loopen med iteratorn.

Exempel 2:

Skaffa nu objekten genom att ange objektattributet inom 'select'-operatorn. Frågan är  ' från i i country_prices välj i.item ”.

//välj operator för att få objektattribut i frågan
var data = från i i land_priser
Välj i . Artikel ;

för varje ( var i i data )
{
Trösta . Skrivlinje ( i ) ;

}

Produktion:

Rad 21 – Rad 29:

2. Var

Om du vill filtrera data baserat på vissa villkor kan du använda operatorn 'where' i frågan tillsammans med 'select'-satsen. Men operatorn 'var' används först och sedan specificeras den valda operatorn.

Syntax:

Låt oss se hur du använder operatorn 'var' i LINQ-frågan.

från iterator i Datakälla
var skick / s
Välj iterator . attribut ;

Exempel 1: Enkelt skick

Låt oss filtrera posterna baserat på artikelattributet. Använd operatorn lika med (==) i operatorn 'var' som ett villkor och jämför iteratorn med 'Chili'. Så de poster som är relaterade till 'Chili' väljs.

Frågan är ' från i i land_priser
där i.item == “Chili”
välj i'

//välj med var du vill filtrera poster
var data = från i i land_priser
var i . Artikel == 'Chili'
Välj i ;

för varje ( var i i data )
{
Trösta . Skrivlinje ( i . Artikel + ' ' + i . plats + ' ' + i . kvantitet + ' ' + i . kosta ) ;

}

Produktion:

Det finns bara en skiva med posten 'Chillies'.

Rad 21 – Rad 30:

Exempel 2: Flera villkor

Låt oss filtrera posterna baserat på plats- och kvantitetsattribut. Kvantiteten bör vara större än 50 och mindre än 300. Platsen ska vara 'USA'.

Frågan är ' från i i land_priser
där i. kvantitet > 50
där i. kvantitet < 300
där i.location == 'USA'
välj i'

//välj med var du vill filtrera poster genom att ange flera villkor
var data = från i i land_priser
var i . kvantitet > femtio
var i . kvantitet < 300
var i . plats == 'USA'
Välj i ;

för varje ( var i i data )
{
Trösta . Skrivlinje ( i . Artikel + ' ' + i . plats + ' ' + i . kvantitet + ' ' + i . kosta ) ;

}

Produktion:

Det finns två rekord som matchade de tidigare villkoren.

Rad 21 – Rad 32:

Exempel 3: Och (&&) operatör

Vi kan ange operatorn 'och (&&)' för att specificera flera villkor samtidigt. Om alla villkor är sanna, returneras posterna som uppfyller alla villkor av frågan.

I det här exemplet väljer vi posterna om kvantiteten är större än 20 och kostnaden är 67,89.

Frågan är ' från i i land_priser
där i.kvantitet < 20 && i.kostnad == 67,89
välj i'

var data = från i i land_priser
var i . kvantitet < tjugo && i . kosta == 67,89
Välj i ;

för varje ( var i i data )
{
Trösta . Skrivlinje ( i . Artikel + ' ' + i . plats + ' ' + i . kvantitet + ' ' + i . kosta ) ;

}

Produktion:

Det finns bara en post med en kvantitet som är mindre än 20 och en kostnad på 67,89

Rad 21 – Rad 29:

Exempel 4: Eller (||) Operatör

Operatorn 'eller (||)' används också för att ange flera villkor samtidigt. Om minst ett villkor är sant, returneras de poster som uppfyller det villkoret.

I det här exemplet väljer vi posterna om kvantiteten är större än 300 eller platsen är 'Tokyo'.

Frågan är ' från i i land_priser
där i.kvantitet > 300 || i.location == “Tokyo”
välj i'

var data = från i i land_priser
var i . kvantitet > 300 || i . plats == 'Tokyo'
Välj i ;

för varje ( var i i data )
{
Trösta . Skrivlinje ( i . Artikel + ' ' + i . plats + ' ' + i . kvantitet + ' ' + i . kosta ) ;

}

Produktion:

Det finns bara en post med en kvantitet som är större än 300 (det första villkoret matchas).

Rad 21 – Rad 29:

3. Beställ efter

Om du vill ordna posterna som returneras av LINQ-frågan i stigande eller fallande ordning baserat på värden i något av attributen, kan du använda operatorn 'order by' i frågan. Du måste ange denna operator före 'välj' operatorn.

Syntax:

Låt oss se hur du använder operatorn 'beställ efter' i LINQ-frågan.

Stigande ordning:

från iterator i Datakälla
beställa förbi iterator . attribut stigande
Välj iterator ;

Fallande ordning:

från iterator i Datakälla
beställa förbi iterator . attribut nedåtgående
Välj iterator ;

Exempel 1: Stigande ordning

Välj alla attribut från datakällan (listan) och returnera dem i stigande ordning baserat på värdena i kvantitetsattributet.

Frågan är ' från i i land_priser
orderby i. kvantitet stigande
välj i'

var data = från i i land_priser
                   orderby i . kvantitet stigande
Välj i ;

för varje ( var i i data )
{
Trösta . Skrivlinje ( i . Artikel + ' ' + i . plats + ' ' + i . kvantitet + ' ' + i . kosta ) ;

}

Produktion:

Rad 21 – Rad 29:

Exempel 2: Fallande ordning

Välj alla attribut från datakällan (listan) och returnera dem i fallande ordning baserat på värdena i kostnadsattributet.

Frågan är ' från i i land_priser
orderby i.kostnad fallande
välj i'

var data = från i i land_priser
                   orderby i . kosta nedåtgående
Välj i ;

för varje ( var i i data )
{
Trösta . Skrivlinje ( i . Artikel + ' ' + i . plats + ' ' + i . kvantitet + ' ' + i . kosta ) ;

}

Produktion:

Rad 21 – Rad 29:

4. Begränsa

Limit i SQL begränsar de poster som returneras av frågan. Den returnerar toppposterna som returneras av frågan. I LINQ kan vi uppnå detta genom att använda Skip() med Take()-operatorn. Take() får det angivna antalet poster. Skip() används för att ange startpostnumret. På så sätt kan vi uppnå 'limit'-funktionen i LINQ.

Syntax:

( från iterator i Datakälla
Välj iterator ) . Hoppa ( n ) . Ta ( n ) ;
  1. Skip() används för att hoppa över posterna och returnera de återstående posterna. Det tar ett heltal som anger antalet element som ska hoppas över. I vårt fall är det 0.
  2. Take() används för att ta 'n' antal poster från den första posten.

Exempel:

Välj de tre första posterna av fem poster som returneras av frågan.

Frågan är ' (från i i country_prices
välj i). Skip(0).Take(3)”

var data = ( från i i land_priser
Välj i ) . Hoppa ( 0 ) . Ta ( 3 ) ;

för varje ( var i i data )
{
Trösta . Skrivlinje ( i . Artikel + ' ' + i . plats + ' ' + i . kvantitet + ' ' + i . kosta ) ;

}

}

Produktion:

Rad 21 – Rad 28:

Slutsats

Vi lärde oss hur man skriver frågorna i C# LINQ som liknar SQL. Som en del av den här handledningen diskuterade vi hur man använder operatorn 'select' för att välja poster från datakällan. För att filtrera posterna som returneras av frågan använde vi operatorn 'var' genom att ange villkoren. Sedan lärde vi oss hur man sorterar de poster som returneras av frågan med operatorn 'order by'. Slutligen, för att begränsa posterna, använde vi operatorerna Skip() och Take().