En iyi yanıtlayıcılar
Bir Koleksiyon içinden Id'sini belirlediğim Elemanın Sorgulamasını Yapmak

Soru
-
List<Customer> customerss = new List<Customer> { new Customer{FirstName = "Elvent", Id = 1}, new Customer{FirstName = "Ahmet", Id = 2} }; #region Koleksiyon metotları var count = customerss.Count();//customer'in eleman sayısı. var customer2 = new Customer { Id = 3, FirstName = "Salih", }; customerss.Add(customer2);//customerss adlı nesnemize customer2'yi ekledik. //Customerin içinde tanımladığımız "customerss" müşterisine yeni bir ekleme yapmak istersek alttaki AddRangeyi kullanmamız gerekir. customerss.AddRange(new Customer[2]//Burada Bize diyor ki Array bazlı liste ver bende customerss'in içine ekliyeyim. { new Customer{FirstName = "Ali", Id = 4}, //genelde bunu elimizde bir veri tabanı varken, yeni bir liste geldiği zaman altına eklemek için kullanırız. new Customer{FirstName = "Yılmaz", Id = 5} } );
if (new Customer().Id == 4)
{
Console.WriteLine("Böyle bir ID bulundu");
}
else
{
Console.WriteLine("Böyle bir ID bulunamadı.");
}Bu şekilde olmuyor :) Burada zaten new diyerek yeni bir Customer oluşturuyorum
bu yüzden olmaz'da doğrusu nasıl olmalı ? Nerde hata yapıyorum
class Customer { public int Id { get; set; } public string FirstName { get; set; } }
Merhaba, biraz araştırma yaptım ancak bunun gibi bir örnek bulamadım. Aşağıdaki örnek koleksiyonda Mesela Id'si 4 olan kullanıcıyı sorgulayıp, ona göre işlem yapmak istiyorum ve burada cidden takıldım. Bunu nasıl yapabilirim ?
- Düzenleyen Einsatzgruppens 7 Eylül 2019 Cumartesi 04:26
7 Eylül 2019 Cumartesi 04:23
Yanıtlar
-
List<Customer> liste = new List<Customer>(); if (liste.Any(x => x.ID == 4)){ //id 4 olan var } else { //id 4 yok } //başka örnek if (liste.Any(x => x.ID == 4 && x.Name == "mehmet")) { //ID 4 ve adı mehmet olan var } else { //yok }
Any dışında exist ve contains methodlarına da bakabilirsin.- Düzenleyen Mehmet Emin Kaymaz 7 Eylül 2019 Cumartesi 06:32
- Yanıt Olarak İşaretleyen Einsatzgruppens 7 Eylül 2019 Cumartesi 07:24
7 Eylül 2019 Cumartesi 06:27 -
Direk Cihan'a yazıyorsun, bizim yazmamızda sorun yoktur sanırım?
Equals methodu Object tipinden -neredeyse- tüm classlara miras kalır. Bir class tanımladığında otomatik olarak Object'ten miras almış olursun. Bu da Object'in virtual olan ToString, Equals ve GetHashCode methodları sende de olur ve istersen bunları ezip(override), yerine kendi methodlarını koyabilirsin demek.
Aşağıdaki örnekte "Aynı renkteki elmalar birbirlerine eşittir" hedefini modelliyor.
enum Renkler{ Kırmızı, Golden, Yeşil } class Elma { public int Id { get; set; } public Renkler Renk { get; set; } public float Ağırlık { get; set; } public Elma(int Id, Renkler Renk, float Ağırlık) { this.Id = Id; this.Renk = Renk; this.Ağırlık = Ağırlık; } public override bool Equals(Object Obj) { if(Obj is Elma) return ((Elma)Obj).Renk == this.Renk; else return false; }
public override int GetHashCode()
{
return (int)this.Renk;
} public static bool operator ==(Elma Elma1, Elma Elma2) => Elma1.Renk == Elma2.Renk; public static bool operator !=(Elma Elma1, Elma Elma2) => Elma1.Renk != Elma2.Renk; }
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
- Düzenleyen Önay YALÇINERModerator 10 Eylül 2019 Salı 07:07
- Yanıt Olarak İşaretleyen Einsatzgruppens 10 Eylül 2019 Salı 13:58
10 Eylül 2019 Salı 06:56Moderatör
Tüm Yanıtlar
-
List<Customer> liste = new List<Customer>(); if (liste.Any(x => x.ID == 4)){ //id 4 olan var } else { //id 4 yok } //başka örnek if (liste.Any(x => x.ID == 4 && x.Name == "mehmet")) { //ID 4 ve adı mehmet olan var } else { //yok }
Any dışında exist ve contains methodlarına da bakabilirsin.- Düzenleyen Mehmet Emin Kaymaz 7 Eylül 2019 Cumartesi 06:32
- Yanıt Olarak İşaretleyen Einsatzgruppens 7 Eylül 2019 Cumartesi 07:24
7 Eylül 2019 Cumartesi 06:27 -
Çok teşekkür ederim hocam taamamdır :)
7 Eylül 2019 Cumartesi 07:24 -
var count = customerss.Count();//customer'in eleman sayısı.
Eğer List üzerinde çalışıyorsanız kendisine ait Count özelliğini kullanın. Count() metodu işleri gereksiz karıştırmaktadır.
Sorunun kendisinde Id nin tekil olma koşulu varsa List değil HashSet kullanmanız daha uygun olacaktır.
void Main() { var liste = new HashSet<Customer>(new CustomerEqualityComparer()); liste.Add(new Customer { Id = 2, Name = "Cihan" }); liste.Add(new Customer { Id = 2, Name = "Mehmet" }); liste.Add(new Customer { Id = 3, Name = "Emin" }); } class Customer { public int Id { get; set; } public string Name { get; set; } } class CustomerEqualityComparer : IEqualityComparer<Customer> { public bool Equals(Customer x, Customer y)=> x.Id == y.Id; public int GetHashCode(Customer obj) => obj.Id; }
Örnek kodda aynı id li ikinci kayıtlar eklenmeyecektir. Eklenmediği durumlarda Add metodu geriye false değerini dönecektir. Böylece kullanıcıyı bilgilendirebilirsiniz.
- Düzenleyen Cihan YakarMVP 8 Eylül 2019 Pazar 10:47
8 Eylül 2019 Pazar 10:45 -
var count = customerss.Count();//customer'in eleman sayısı.
Eğer List üzerinde çalışıyorsanız kendisine ait Count özelliğini kullanın. Count() metodu işleri gereksiz karıştırmaktadır.
Sorunun kendisinde Id nin tekil olma koşulu varsa List değil HashSet kullanmanız daha uygun olacaktır.
void Main() { var liste = new HashSet<Customer>(new CustomerEqualityComparer()); liste.Add(new Customer { Id = 2, Name = "Cihan" }); liste.Add(new Customer { Id = 2, Name = "Mehmet" }); liste.Add(new Customer { Id = 3, Name = "Emin" }); } class Customer { public int Id { get; set; } public string Name { get; set; } } class CustomerEqualityComparer : IEqualityComparer<Customer> { public bool Equals(Customer x, Customer y) => x.Id == y.Id; public int GetHashCode(Customer obj) => obj.Id; }
Örnek kodda aynı id li ikinci kayıtlar eklenmeyecektir. Eklenmediği durumlarda Add metodu geriye false değerini dönecektir.
- Düzenleyen Einsatzgruppens 8 Eylül 2019 Pazar 11:07
8 Eylül 2019 Pazar 11:06 -
C#,.net oldukça hızlı gelişiyorlar. Müfredatlar ve eğitmenler yakalamakta zorlanıyorlardır. Ama HashSet, IEqualityComparer epeeey eski. Ya onlarda bilmiyor ya da ince konulara girmek istemiyorlar.8 Eylül 2019 Pazar 11:17
-
C#,.net oldukça hızlı gelişiyorlar. Müfredatlar ve eğitmenler yakalamakta zorlanıyorlardır. Ama HashSet, IEqualityComparer epeeey eski. Ya onlarda bilmiyor ya da ince konulara girmek istemiyorlar.
Cihan hocam konuyla alakasız ama bir şey sormak istiyorum ;
Şunun anlamı : public int GetHasHCode(Customer obj)
=> obj.Id;Yani : => return anlamına geliyor sanırım doğru mu? Bu tür ifadelerle alakalı bilgi için hangi konuyu araştırmalıyım?
Edit : Ve sanırım anladığım kadarıyla, köşeli parentez kullanmayıp böyle tek işlemler için => return yerine kullanabiliyoruz sanırım.
- Düzenleyen Einsatzgruppens 9 Eylül 2019 Pazartesi 10:27
9 Eylül 2019 Pazartesi 10:17 -
hayır return anlamına gelmiyor. Bir fonksiyon tanımlıyor.
public int Topla(int Sayı1, int Sayı2) { return Sayı1 + Sayı2; } //ile public int Topla(int Sayı1, int Sayı2) => Sayı1 + Sayı2; //aynı şey.
Bu daha çok parametresi fonksiyon olan methodlar için kullanılıyor.e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
9 Eylül 2019 Pazartesi 10:28Moderatör -
hayır return anlamına gelmiyor. Bir fonksiyon tanımlıyor.
Hocam çok sagolun yanıtınız için. "=>" bu ifadeden bahsettiniz değil mi? return keyword'u ile aynı işi görüyor işte return anlamına gelmiyor mu bir nevi :D
public int Topla(int Sayı1, int Sayı2) { return Sayı1 + Sayı2; } //ile public int Topla(int Sayı1, int Sayı2) => Sayı1 + Sayı2; //aynı şey.
Bu daha çok parametresi fonksiyon olan methodlar için kullanılıyor.
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
- Düzenleyen Einsatzgruppens 9 Eylül 2019 Pazartesi 10:33
9 Eylül 2019 Pazartesi 10:32 -
hayır return anlamına gelmiyor. Bir fonksiyon tanımlıyor.
public int Topla(int Sayı1, int Sayı2) { return Sayı1 + Sayı2; } //ile public int Topla(int Sayı1, int Sayı2) => Sayı1 + Sayı2; //aynı şey.
Bu daha çok parametresi fonksiyon olan methodlar için kullanılıyor.
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
Hocam çok sagolun yanıtınız için. "=>" bu ifadeden bahsettiniz değil mi? return keyword'u ile aynı işi görüyor işte return anlamına gelmiyor mu bir nevi :D
Func<int,int,int> Topla = (int Sayı1, int Sayı2) => { return Sayı1 + Sayı2;};
şeklinde yazarsan öyle olmuyor.
- Düzenleyen Cihan YakarMVP 9 Eylül 2019 Pazartesi 10:55
9 Eylül 2019 Pazartesi 10:39 -
hayır return anlamına gelmiyor. Bir fonksiyon tanımlıyor.
public int Topla(int Sayı1, int Sayı2) { return Sayı1 + Sayı2; } //ile public int Topla(int Sayı1, int Sayı2) => Sayı1 + Sayı2; //aynı şey.
Bu daha çok parametresi fonksiyon olan methodlar için kullanılıyor.
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
Hocam çok sagolun yanıtınız için. "=>" bu ifadeden bahsettiniz değil mi? return keyword'u ile aynı işi görüyor işte return anlamına gelmiyor mu bir nevi :D
Func<int,int,int> Topla = (int Sayı1, int Sayı2) => { return Sayı1 + Sayı2;};
şeklinde yazarsan öyle olmuyor.
Cihan hocam ben şu şekilde bir sorgulama yapmak istersem bunu nasıl yapabilirim?
Aşağıda yazdığım kodla sorgulama yapamıyorum, tamam sizin bana verdiğiniz örnek hazır sınıflar ve metotlar var fakat kendim yapmak istersem sorgulamayı aşağıdaki mantıkla doğru olur mu? Sorgulamayı beceremedim bir türlü kafayı yedirdi bana
class Test { public bool Equals(Customer x, Customer y) { if (x.Id == y.Id) { return false; } else { return true; } } }
10 Eylül 2019 Salı 01:26 -
Direk Cihan'a yazıyorsun, bizim yazmamızda sorun yoktur sanırım?
Equals methodu Object tipinden -neredeyse- tüm classlara miras kalır. Bir class tanımladığında otomatik olarak Object'ten miras almış olursun. Bu da Object'in virtual olan ToString, Equals ve GetHashCode methodları sende de olur ve istersen bunları ezip(override), yerine kendi methodlarını koyabilirsin demek.
Aşağıdaki örnekte "Aynı renkteki elmalar birbirlerine eşittir" hedefini modelliyor.
enum Renkler{ Kırmızı, Golden, Yeşil } class Elma { public int Id { get; set; } public Renkler Renk { get; set; } public float Ağırlık { get; set; } public Elma(int Id, Renkler Renk, float Ağırlık) { this.Id = Id; this.Renk = Renk; this.Ağırlık = Ağırlık; } public override bool Equals(Object Obj) { if(Obj is Elma) return ((Elma)Obj).Renk == this.Renk; else return false; }
public override int GetHashCode()
{
return (int)this.Renk;
} public static bool operator ==(Elma Elma1, Elma Elma2) => Elma1.Renk == Elma2.Renk; public static bool operator !=(Elma Elma1, Elma Elma2) => Elma1.Renk != Elma2.Renk; }
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
- Düzenleyen Önay YALÇINERModerator 10 Eylül 2019 Salı 07:07
- Yanıt Olarak İşaretleyen Einsatzgruppens 10 Eylül 2019 Salı 13:58
10 Eylül 2019 Salı 06:56Moderatör -
Direk Cihan'a yazıyorsun, bizim yazmamızda sorun yoktur sanırım?
Equals methodu Object tipinden -neredeyse- tüm classlara miras kalır. Bir class tanımladığında otomatik olarak Object'ten miras almış olursun. Bu da Object'in virtual olan ToString, Equals ve GetHashCode methodları sende de olur ve istersen bunları ezip(override), yerine kendi methodlarını koyabilirsin demek.
Aşağıdaki örnekte "Aynı renkteki elmalar birbirlerine eşittir" hedefini modelliyor.
enum Renkler{ Kırmızı, Golden, Yeşil } class Elma { public int Id { get; set; } public Renkler Renk { get; set; } public float Ağırlık { get; set; } public Elma(int Id, Renkler Renk, float Ağırlık) { this.Id = Id; this.Renk = Renk; this.Ağırlık = Ağırlık; } public override bool Equals(Object Obj) { if(Obj is Elma) return ((Elma)Obj).Renk == this.Renk; else return false; }
public override int GetHashCode()
{
return (int)this.Renk;
} public static bool operator ==(Elma Elma1, Elma Elma2) => Elma1.Renk == Elma2.Renk; public static bool operator !=(Elma Elma1, Elma Elma2) => Elma1.Renk != Elma2.Renk; }
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
10 Eylül 2019 Salı 14:05 -
bu verdiğim örnek ilk sorunuzun cevabı değil. Sadece Equals ve == operatörünü anlamanıza yardımcı olsun diye paylaştım.
Sorunuzda kolleksiyon içinde kullanacağınızda Mehmet Emin'in yanıtını dikkate almalısınız. Yani Any, All vs. Linq methodlarını kullanmalısınız.
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
11 Eylül 2019 Çarşamba 08:07Moderatör -
bu verdiğim örnek ilk sorunuzun cevabı değil. Sadece Equals ve == operatörünü anlamanıza yardımcı olsun diye paylaştım.
Sorunuzda kolleksiyon içinde kullanacağınızda Mehmet Emin'in yanıtını dikkate almalısınız. Yani Any, All vs. Linq methodlarını kullanmalısınız.
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
11 Eylül 2019 Çarşamba 09:51 -
Listelerde LINQ kullanılabiliyor diye biliyorum
misal
dim Per=(From Prs in customerss where Prs.ID=2).firstordefault (vb.net)
LINQ ile çok hızlı sorgular yapabilirsiniz. hatta listedeki key elemanına bağlı kalmadan. araştırın derim.
aşağıdaki kod çalıştı. hoş var değişken kullandım C# fazla bilmiyorum. ama LINQ kullanabiliyormuşuz.
class Customer
{
public int Id { get; set; }
public string FirstName { get; set; }
}
static class Program {
static void Main() {
List<Customer> customerss = new List<Customer>
{
new Customer{FirstName = "Elvent", Id = 1},
new Customer{FirstName = "Ahmet", Id = 2}
};
var count = customerss.Count();//customer'in eleman sayısı.
var customer2 = new Customer
{
Id = 3,
FirstName = "Salih",
};
customerss.Add(customer2);//customerss adlı nesnemize customer2'yi ekledik.
//Customerin içinde tanımladığımız "customerss" müşterisine yeni bir ekleme yapmak istersek alttaki AddRangeyi kullanmamız gerekir.
customerss.AddRange(new Customer[2]//Burada Bize diyor ki Array bazlı liste ver bende customerss'in içine ekliyeyim.
{
new Customer{FirstName = "Ali", Id = 4}, //genelde bunu elimizde bir veri tabanı varken, yeni bir liste geldiği zaman altına eklemek için kullanırız.
new Customer{FirstName = "Yılmaz", Id = 5}
}
);
var Cstmr = (from Cst in customerss where Cst.Id == 4 select Cst);
if (!(Cstmr is null))
{
Console.WriteLine("Böyle bir ID bulundu");
}
else
{
Console.WriteLine("Böyle bir ID bulunamadı.");
}
}
}
}
- Düzenleyen SinanZorlu 12 Eylül 2019 Perşembe 11:22
12 Eylül 2019 Perşembe 10:59 -
Listelerde LINQ kullanılabiliyor diye biliyorum
misal
dim Per=(From Prs in customerss where Prs.ID=2).firstordefault (vb.net)
LINQ ile çok hızlı sorgular yapabilirsiniz. hatta listedeki key elemanına bağlı kalmadan. araştırın derim.
aşağıdaki kod çalıştı. hoş var değişken kullandım C# fazla bilmiyorum. ama LINQ kullanabiliyormuşuz.
class Customer
{
public int Id { get; set; }
public string FirstName { get; set; }
}
static class Program {
static void Main() {
List<Customer> customerss = new List<Customer>
{
new Customer{FirstName = "Elvent", Id = 1},
new Customer{FirstName = "Ahmet", Id = 2}
};
var count = customerss.Count();//customer'in eleman sayısı.
var customer2 = new Customer
{
Id = 3,
FirstName = "Salih",
};
customerss.Add(customer2);//customerss adlı nesnemize customer2'yi ekledik.
//Customerin içinde tanımladığımız "customerss" müşterisine yeni bir ekleme yapmak istersek alttaki AddRangeyi kullanmamız gerekir.
customerss.AddRange(new Customer[2]//Burada Bize diyor ki Array bazlı liste ver bende customerss'in içine ekliyeyim.
{
new Customer{FirstName = "Ali", Id = 4}, //genelde bunu elimizde bir veri tabanı varken, yeni bir liste geldiği zaman altına eklemek için kullanırız.
new Customer{FirstName = "Yılmaz", Id = 5}
}
);
var Cstmr = (from Cst in customerss where Cst.Id == 4 select Cst);
if (!(Cstmr is null))
{
Console.WriteLine("Böyle bir ID bulundu");
}
else
{
Console.WriteLine("Böyle bir ID bulunamadı.");
}
}
}
}
Sinan bey,
Soru mu soruyorsunuz, cevap mi veriyorsunuz? Sanki soruyor gibisiniz.
C# ile yazanlar:
dim Per=(From Prs in customerss where Prs.ID=2).firstordefault
seklinde bir kodu (yeni başlamadılarsa) yazmazlar. ID genellikle primary key olarak kullanılır. Bu durumda kullanmanız gereken:
var per = Customerss.SingleOrDefault(c => c.ID == 2);
Soruya cevap vermeye calistiysaniz, zaten daha ilk verilen cevapta sorunun cevabi var:
var mevcut = customerss.Any(c => c.ID == 2);
("C#'ta Linq kullanabiliyormusuz" - Hoş bir espri olmuş, sanki VB degil Linq'nin kaynağı F# ile yazıyormuşsunuz gibi :)
How to create a Minimal, Reproducible Example
The way to Go.
World's most advanced open source (object-) relational Database.
Flutter (for mobile, for web & desktop.12 Eylül 2019 Perşembe 13:43Yanıtlayıcı -
Size cevap verebilmeyi çok isterdim eğer düzgün okumuş ve anlamış olsa idiniz. tamamen dikkatsiz bir okuma üzerinden yaptığınız hatalı yoruma cevap vermek daha büyük hataya sebep olacaktır. lütfen biraz daha dikkatli okuyun. gerekirse fontu biraz büyütün, bazı harfleri atlamış olabilirsiniz.13 Eylül 2019 Cuma 05:12
-
Sinan kardeş; "Listelerde LINQ kullanılabilir diye biliyorum ..." ile başlayan bir yazıyı font size'ı ne olursa olsun okumaya gerek yok zaten. Bence sen verilmiş yanıtları önce bir oku sonra yaz. Okumadan bilmeden yazıp biri gelip seni eleştirince de atarlanma bence.
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
13 Eylül 2019 Cuma 07:04Moderatör