Select ve SelectMany Nedir , Nasıl Kullanılır ?

Okuma Süresi: 5 dakika
A+
A-

EF Core da en çok kullanılan metotlardan olan Select nedir ve nasıl kullanılır aşağıda açıklamalar ve örneklerle inceleyelim. Select projeksiyon yapmamızı sağlayan bir metotdur. Yaptığımız sorgulamalar sonrasında Select kullanarak buradan hangi dataların dönmesini istediğimizi belirleyebiliriz. Select işlem IQueryable olduğundan ötürü data IEnumarable ‘a geçiş yapmadan(ToList) önce yapılmalıdır ! Select in genel olarak üç farklı kullanımı vardır.

Doğrudan ilgili tipin belirli propertyler ile dönülmesi (Burada Select yapılmamış diğer propertyler null dönecektir !).

Tipsiz olarak belirli propertylerin dönülmesi.

Yeni bir model oluşturup bu modelin dönülmesi.

Bir tipin belirli propertylerinin Select ile dönülmesi

Aşağıdaki Ürün entitysi üzerinden sadece belirli propertylerin Select ile dönülmesi örneğini inceleyelim. Bu örnekte sadece Id ve Fiyat bilgileri dolu olarak , diğer propertyler null olarak dönecektir.

public class Urun
{
    public int Id { get; set; }
    public string UrunAdi { get; set; }
    public float Fiyat { get; set; }

    public ICollection<Parca> Parcalar { get; set; }
    public Satici Satici { get; set; }
    public int SaticiId { get; set; }
}

var urunler = await context.Urunler.Select(u => new Urun
{
    Id = u.Id,
    Fiyat = u.Fiyat
}).ToListAsync();

Her hangi bir tip belirtmeden tipsiz olarak seçilen propertylerin Select ile dönülmesi

Aşağıdaki Ürün entitysi üzerinden her hangi bir dönüş tipi belirtmeden tipsiz olarak istenilen propertylerin dönülmesi durumunda sadece belirlenen propertylerin dataları dönecektir. Diğer alanlar için null veya her hangi bir dönüş değeri olmayacaktır.

public class Urun
{
    public int Id { get; set; }
    public string UrunAdi { get; set; }
    public float Fiyat { get; set; }

    public ICollection<Parca> Parcalar { get; set; }
    public Satici Satici { get; set; }
    public int SaticiId { get; set; }
}

var urunler = await context.Urunler.Select(u => new
{
    Id = u.Id,
    Fiyat = u.Fiyat
}).ToListAsync();

Model oluşturup bunun üzerinden Select ile dönülmesi

Bu yöntem en çok kullanılan yöntemdir. Bu yöntemde sadece dönülecek datalar için yeni bir model oluşturulur ve ilgili dönülecek propertyler bu model içine yerleştirilir. Select ile projeksiyon işlemi yapıldığı zaman da burada doğrudan model dönülmüş olur.

public class Urun
{
    public int Id { get; set; }
    public string UrunAdi { get; set; }
    public float Fiyat { get; set; }

    public ICollection<Parca> Parcalar { get; set; }
    public Satici Satici { get; set; }
    public int SaticiId { get; set; }
}

public class UrunDetayModel
{
    public int Id { get; set; }
    public float Fiyat { get; set; }
}

var urunler = await context.Urunler.Select(u => new UrunDetayModel
{
    Id = u.Id,
    Fiyat = u.Fiyat
}).ToListAsync();

SelectMany nedir ? SelectMany nasıl kullanılır ?

Yukarıda yapılan örneklendirmeler de EF Core ‘da Select ‘in nasıl ve hangi amaçlar için kullanılabileceğini örneklendirmiş olduk. Peki SelectMany nerede nasıl ve hangi amaç için kullanıyoruz ?

SelectMany ilişkisel tablolar arasında var olan bir koleksiyonel tabloyu da projeksiyon işlemine dahil etmek amacıyla kullanılır. Aşağıdaki örnekte Ürünler entitysi ile Parçalar entitysi arasındaki ilişkiyi görüyoruz. Burada yaptığımız bir sorguda her ürüne bağlı olan parçaları da Select ile dahil etmek istediğimiz zaman koleksiyonel yapı olduğu için bu işlemi yapamıyoruz. İşte burada SelectMany devreye giriyor. Aşağıdaki örnekte bunu inceleyelim.

Bu örnekte her bir ürünün Id değeri , fiyat değeri ve bu ürüne bağlı olan parçaları göstermek istiyoruz. Burada ilişkisel tablolar arasında sorguya dahil etmek için kullanılan Include yapısını kullanıp context üzerinden gittiğimiz Urunler entitysine Include diyerek Parcalar entitysini de dahil etmiş oluyoruz. Koleksiyonel yapı olduğu için SelectMany ile ilgili projeksiyon işlemini başarılı bir şekilde tamamlamış oluyoruz.

public class Urun
{
    public int Id { get; set; }
    public string UrunAdi { get; set; }
    public float Fiyat { get; set; }

    public ICollection<Parca> Parcalar { get; set; }
    public Satici Satici { get; set; }
    public int SaticiId { get; set; }
}

public class Parca
{
    public int Id { get; set; }
    public string ParcaAdi { get; set; }
}

var urunler = await context.Urunler.Include(u => u.Parcalar).SelectMany(u => u.Parcalar,  (u, p) => new
{
    u.Id,
    u.Fiyat,
    p.ParcaAdi
}).ToListAsync();

Bir Yorum Yazın

Ziyaretçi Yorumları - 0 Yorum

Henüz yorum yapılmamış.