C# LINQ'da Sorgu Yazma

C Linq Da Sorgu Yazma



SQL'e benzer şekilde, sorgu sözdizimini kullanarak C# LINQ'da sorgu yazmak mümkündür. Bu sorgular, web üzerindeki C# veritabanı uygulamalarında, veritabanından veri almak ve web üzerinde üçüncü taraf kullanıcılara göstermek için kullanılır. Bu kılavuzda, SQL'e benzer bazı LINQ sorgularını tartışacağız. Bunun için bir liste veri kaynağı oluşturacağız ve içindeki sorguları uygulayacağız.

Sorgu Sözdizimi:

Genel sözdizimine bakalım:

itibaren yineleyici içinde Veri kaynağı
seçme yineleyici ;

Burada:







  1. Data_Source, verileri tutan liste olabilir.
  2. Yineleyici, öğeleri Data_Source'tan getirmek için kullanılır.

Veri kaynağı

Bu kılavuzun tamamında, aşağıdaki kayıt listesini veri kaynağı olarak kullanacağız ve tüm sorgular yalnızca bu veri kaynağına uygulanacaktır. Bu kodu ortamınızda çalıştırdığınızdan emin olun ve sorgu deyimlerini aşağıda ele alacağımız örneklerle tek tek değiştirin:



kullanarak Sistem ;
kullanarak System.Collections.Generic ;
kullanarak System.Linq ;
kullanarak System.Collections ;

halk sınıf hesaplamalar
{
halk statik geçersiz Ana ( )
{
// Liste oluşturma
Ülke fiyatlarını listele = yeni Liste ( ) {

// Listeye 5 kayıt ekleyin
yeni Fiyat:% s ( ) { öğe = 'Meyveler' ,konum = 'AMERİKA BİRLEŞİK DEVLETLERİ' , miktar = 100 , maliyet = 345,78 } ,
yeni Fiyat:% s ( ) { öğe = 'Fındık' ,konum = 'Hindistan' , miktar = 200 , maliyet = 3645,78 } ,
yeni Fiyat:% s ( ) { öğe = 'Diğerleri' ,konum = 'İngiltere' , miktar = 500 , maliyet = 90.68 } ,
yeni Fiyat:% s ( ) { öğe = 'yağ' ,konum = 'AMERİKA BİRLEŞİK DEVLETLERİ' , miktar = 100 , maliyet = 345,78 } ,
yeni Fiyat:% s ( ) { öğe = 'Biber' ,konum = 'AMERİKA BİRLEŞİK DEVLETLERİ' , miktar = 10 , maliyet = 67.89 } ,
} ;


her biri için ( öyleydi Ben içinde ülke_fiyatları )
{
Konsol . Yazı çizgisi ( Ben . öğe + ' ' + Ben . konum + ' ' + Ben . miktar + ' ' + Ben . maliyet ) ;
}
}
}
halk sınıf Fiyat:% s {
halk sicim öğe { elde etmek ; ayarlamak ; }
halk sicim konum { elde etmek ; ayarlamak ; }
halk int miktar { elde etmek ; ayarlamak ; }
halk çift maliyet { elde etmek ; ayarlamak ; }
}

Kayıtlar:







Açıklama:

1. Aşağıdaki özelliklere sahip fiyatları oluşturun:

2. Ana metot ile “Hesaplamalar” adında başka bir sınıf oluşturun ve beş kayıtlı country_prices listesini oluşturun.



Seçme

Temel olarak, 'seç', belirtilen veri kaynağından öznitelikleri seçen bir projeksiyon operatörüdür. Sorgu “from” ile başlar. Ardından, veri kaynağı üzerinde yinelenen yineleyiciyi belirtiriz. Daha sonra “select” operatörü belirtilir.

Sözdizimi:

Tüm Nitelikler: Data_Source içindeki yineleyiciden yineleyiciyi seçin;

Özel Nitelik: Data_Source içindeki yineleyiciden yineleyici.özniteliği seçin;

Örnek 1:

Listeden tüm kayıtları seçmek için bir sorgu yazalım.

kullanarak Sistem ;
kullanarak System.Collections.Generic ;
kullanarak System.Linq ;
kullanarak System.Collections ;

halk sınıf hesaplamalar
{
halk statik geçersiz Ana ( )
{
// Liste oluşturma
Ülke fiyatlarını listele = yeni Liste ( ) {

// Listeye 5 kayıt ekleyin
yeni Fiyat:% s ( ) { öğe = 'Meyveler' ,konum = 'AMERİKA BİRLEŞİK DEVLETLERİ' , miktar = 100 , maliyet = 345,78 } ,
yeni Fiyat:% s ( ) { öğe = 'Fındık' ,konum = 'Hindistan' , miktar = 200 , maliyet = 3645.78 } ,
yeni Fiyat:% s ( ) { öğe = 'Diğerleri' ,konum = 'İngiltere' , miktar = 500 , maliyet = 90.68 } ,
yeni Fiyat:% s ( ) { öğe = 'yağ' ,konum = 'AMERİKA BİRLEŞİK DEVLETLERİ' , miktar = 100 , maliyet = 345,78 } ,
yeni Fiyat:% s ( ) { öğe = 'Biber' ,konum = 'AMERİKA BİRLEŞİK DEVLETLERİ' , miktar = 10 , maliyet = 67.89 } ,
} ;

// sorguda operatör seç
öyleydi veri = itibaren Ben içinde ülke_fiyatları
seçme Ben ;

her biri için ( öyleydi Ben içinde veri )
{
Konsol . Yazı çizgisi ( Ben . öğe + ' ' + Ben . konum + ' ' + Ben . miktar + ' ' + Ben . maliyet ) ;

}
}
}
halk sınıf Fiyat:% s {
halk sicim öğe { elde etmek ; ayarlamak ; }
halk sicim konum { elde etmek ; ayarlamak ; }
halk int miktar { elde etmek ; ayarlamak ; }
halk çift maliyet { elde etmek ; ayarlamak ; }
}

Çıktı:

Burada “select” sorgusunda herhangi bir özellik belirtmedik. Yineleyiciyi kullanarak 'foreach' döngüsü içindeki sorgudan (verilerden) tüm öznitelikleri getirdik.

Örnek 2:

Şimdi, 'select' operatöründe item özelliğini belirterek itemleri alın. Sorgu  ' country_prices içindeki i'den i.item'i seçin ”.

// sorguda öğe özniteliğini almak için operatörü seçin
öyleydi veri = itibaren Ben içinde ülke_fiyatları
seçme Ben . öğe ;

her biri için ( öyleydi Ben içinde veri )
{
Konsol . Yazı çizgisi ( Ben ) ;

}

Çıktı:

Satır # 21 – Satır # 29:

2. nerede

Verileri bazı koşullara/koşullara göre filtrelemek istiyorsanız, sorguda 'where' operatörünü 'select' yan tümcesi ile birlikte kullanabilirsiniz. Ancak önce “where” operatörü kullanılır ve ardından select operatörü belirtilir.

Sözdizimi:

LINQ sorgusunda “where” operatörünün nasıl kullanılacağını görelim.

itibaren yineleyici içinde Veri kaynağı
Neresi durum / S
seçme yineleyici . bağlanmak ;

Örnek 1: Tek Koşul

Kayıtları item niteliğine göre filtreleyelim. Koşul olarak 'where' operatöründe eşittir (==) operatörünü kullanın ve yineleyiciyi 'Chhillies' ile karşılaştırın. Böylece “Biber” ile ilgili kayıtlar seçilir.

Sorgu “ ülke fiyatlarında i'den
burada i.item == “Biber”
i seç”

// kayıtların nerede filtreleneceğini seçin
öyleydi veri = itibaren Ben içinde ülke_fiyatları
Neresi Ben . öğe == 'Biber'
seçme Ben ;

her biri için ( öyleydi Ben içinde veri )
{
Konsol . Yazı çizgisi ( Ben . öğe + ' ' + Ben . konum + ' ' + Ben . miktar + ' ' + Ben . maliyet ) ;

}

Çıktı:

“Biber” maddesine ait tek kayıt bulunmaktadır.

Satır # 21 – Satır # 30:

Örnek 2: Çoklu Koşullar

Lokasyon ve miktar özelliklerine göre kayıtları filtreleyelim. Miktar 50'den büyük ve 300'den az olmalıdır. Konum “ABD” olmalıdır.

Sorgu “ ülke fiyatlarında i'den
burada i.miktar > 50
burada i.miktar < 300
burada i.location == “ABD”
i seç”

//birden fazla koşul belirterek kayıtların nerede filtreleneceğini seçin
öyleydi veri = itibaren Ben içinde ülke_fiyatları
Neresi Ben . miktar > elli
Neresi Ben . miktar < 300
Neresi Ben . konum == 'AMERİKA BİRLEŞİK DEVLETLERİ'
seçme Ben ;

her biri için ( öyleydi Ben içinde veri )
{
Konsol . Yazı çizgisi ( Ben . öğe + ' ' + Ben . konum + ' ' + Ben . miktar + ' ' + Ben . maliyet ) ;

}

Çıktı:

Önceki koşullarla eşleşen iki kayıt var.

Satır # 21 – Satır # 32:

Örnek 3: Ve (&&) Operatörü

Aynı anda birden fazla koşul belirtmek için “ve (&&)” operatörünü belirtebiliriz. Tüm koşullar doğruysa, sorgu tarafından tüm koşulları sağlayan kayıtlar döndürülür.

Bu örnekte, miktar 20'den büyükse ve maliyet 67,89 ise kayıtları seçiyoruz.

Sorgu “ ülke fiyatlarında i'den
burada i.miktar < 20 && i.maliyet == 67.89
i seç”

öyleydi veri = itibaren Ben içinde ülke_fiyatları
Neresi Ben . miktar < yirmi && Ben . maliyet == 67.89
seçme Ben ;

her biri için ( öyleydi Ben içinde veri )
{
Konsol . Yazı çizgisi ( Ben . öğe + ' ' + Ben . konum + ' ' + Ben . miktar + ' ' + Ben . maliyet ) ;

}

Çıktı:

Miktarı 20'den az ve maliyeti 67,89 olan tek bir kayıt var.

Satır # 21 – Satır # 29:

Örnek 4: Veya (||) Operatör

'veya (||)' operatörü aynı anda birden fazla koşul belirtmek için de kullanılır. En az bir koşul doğruysa, bu koşulu sağlayan kayıtlar döndürülür.

Bu örnekte miktar 300'den büyükse veya konum 'Tokyo' ise kayıtları seçiyoruz.

Sorgu “ ülke fiyatlarında i'den
burada i.miktar > 300 || i.konum == “Tokyo”
i seç”

öyleydi veri = itibaren Ben içinde ülke_fiyatları
Neresi Ben . miktar > 300 || Ben . konum == 'Tokyo'
seçme Ben ;

her biri için ( öyleydi Ben içinde veri )
{
Konsol . Yazı çizgisi ( Ben . öğe + ' ' + Ben . konum + ' ' + Ben . miktar + ' ' + Ben . maliyet ) ;

}

Çıktı:

Miktarı 300'den büyük olan tek bir kayıt vardır (ilk koşul eşleşir).

Satır # 21 – Satır # 29:

3. Sipariş Veren

LINQ sorgusu tarafından döndürülen kayıtları, özniteliklerin herhangi birindeki değerlere göre artan veya azalan düzende düzenlemek istiyorsanız, sorguda 'sırala' operatörünü kullanabilirsiniz. Bu operatörü “select” operatöründen önce belirtmeniz gerekir.

Sözdizimi:

LINQ sorgusunda “order by” operatörünün nasıl kullanılacağını görelim.

Artan Sıra:

itibaren yineleyici içinde Veri kaynağı
emir ile yineleyici . bağlanmak artan
seçme yineleyici ;

Azalan sipariş:

itibaren yineleyici içinde Veri kaynağı
emir ile yineleyici . bağlanmak Azalan
seçme yineleyici ;

Örnek 1: artan sıralama

Veri kaynağından (liste) tüm özellikleri seçin ve miktar özelliğindeki değerlere göre artan sırada döndürün.

Sorgu “ ülke fiyatlarında i'den
siparişe göre i.miktar artan
i seç”

öyleydi veri = itibaren Ben içinde ülke_fiyatları
bana göre sipariş ver . miktar artan
seçme Ben ;

her biri için ( öyleydi Ben içinde veri )
{
Konsol . Yazı çizgisi ( Ben . öğe + ' ' + Ben . konum + ' ' + Ben . miktar + ' ' + Ben . maliyet ) ;

}

Çıktı:

Satır # 21 – Satır # 29:

Örnek 2: Azalan sipariş

Veri kaynağından (liste) tüm özellikleri seçin ve bunları maliyet özelliğindeki değerlere göre azalan sırada döndürün.

Sorgu “ ülke fiyatlarında i'den
siparişe göre i.maliyet azalıyor
i seç”

öyleydi veri = itibaren Ben içinde ülke_fiyatları
bana göre sipariş ver . maliyet Azalan
seçme Ben ;

her biri için ( öyleydi Ben içinde veri )
{
Konsol . Yazı çizgisi ( Ben . öğe + ' ' + Ben . konum + ' ' + Ben . miktar + ' ' + Ben . maliyet ) ;

}

Çıktı:

Satır # 21 – Satır # 29:

4. Sınır

SQL'deki limit, sorgu tarafından döndürülen kayıtları sınırlar. Sorgu tarafından döndürülen en iyi kayıtları döndürür. LINQ'da bunu, Take() operatörüyle Skip()'i kullanarak başarabiliriz. Take() belirtilen sayıda kayıt alır. Skip(), başlangıç ​​kayıt numarasını belirtmek için kullanılır. Bu şekilde LINQ'da “limit” işlevselliğini elde edebiliriz.

Sözdizimi:

( itibaren yineleyici içinde Veri kaynağı
seçme yineleyici ) . Atlamak ( N ) . Almak ( N ) ;
  1. Skip (), kayıtları atlamak ve kalan kayıtları döndürmek için kullanılır. Atlanacak öğelerin sayısını belirten bir tamsayı alır. Bizim durumumuzda 0.
  2. Take () ilk kayıttan “N” kayıt sayısını almak için kullanılır.

Örnek:

Sorgu tarafından döndürülen beş kayıttan ilk üç kaydı seçin.

Sorgu ' (COUNTER_PRICES'DEN I'den
I) .Skip (0).

öyleydi veri = ( itibaren Ben içinde country_prices
seçme Ben ) . Atlamak ( 0 ) . Almak ( 3 ) ;

her biri için öyleydi Ben içinde veri )

Konsol . Yazı çizgisi Ben . öğe + + Ben . konum + + Ben . miktar + + Ben . maliyet ) ;

}

}

Çıktı:

Satır # 21 - Satır # 28:

Çözüm

Soruların SQL'e benzer C# Linq'te nasıl yazılacağını öğrendik. Bu öğreticinin bir parçası olarak, veri kaynağından kayıtları seçmek için “Seç” operatörünün nasıl kullanılacağını tartıştık. Sorgu tarafından döndürülen kayıtları filtrelemek için koşulları belirleyerek “nerede” operatörünü kullandık. Ardından, sorgu tarafından döndürülen kayıtların “Sipariş” operatörüyle nasıl sıralayacağını öğrendik. Son olarak, kayıtları sınırlamak için Skip () ve Take () operatörlerini kullandık.