Linq etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Linq etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

19 Eylül 2018 Çarşamba

Linq Quantifier Metodları

Giriş
Quantifier metodları dizinin tamamının veya bazı elemanların bir koşulu sağlayıp sağlamadığını döndürürler.

All metodu
Örnek ver

Any metodu- Empty
Eğer liste null ise ArgumentNullException fırlatır. Açıklaması şöyle.
I have a bag with five potatoes in it. Are there .Any() potatoes in the bag?

"Yes," you say. <= true

I take all of the potatoes out and eat them. Are there .Any() potatoes in the bag?

"No," you say. <= false

I completely incinerate the bag in a fire. Are there .Any() potatoes in the bag now?

"There is no bag." <= ArgumentNullException
Predicate almayan Any sadece dizinin boş olup olmadığını döner. İçi şöyledir.
public static bool Any<TSource>(this IEnumerable<TSource> source) 
{
  if (source == null) throw Error.ArgumentNull("source");
  using (IEnumerator<TSource> e = source.GetEnumerator()) {
    if (e.MoveNext()) return true;
  }
  return false;
}
Örnek
Şöyle kullanırız.
IEnumerable<int> listOfThings = new List<int>();
...
if (listOfThings.Any()) {...}
Any metodu - Predicate
Şöyle yaparız.
List<Mobiles> mobList = new List<Mobiles>()
{
  new Mobiles() { mName = "iPhone 4", mCat = "Smart Phone"},
  ...
};

bool flag = mobList.Any(x => (x.mName =="iPhone 4"));

Contains metodu
Contains metodu List sınıfına ait Equals() metodu ile karıştırılıyor. Contains elemanın Equals() metodunu gerçekleştirmesini ister.


5 Eylül 2018 Çarşamba

Linq Grouping Data ToLookup metodu

Giriş
ToList(), ToDictonary() metodları gibidir. Bir veri yapısı döndürür. Döndürülen veri yapısı bir multimap'tir. Veri yapısı ILookup arayüzünden kalıtır.

Yani ToDictionary() metodu bir key-value pair döndürürken, ToLookup() metodu bir key-value list döndürür.

Örnek
Şöyle yaparız. string'in ilk harfine yani ismin ilk harfine göre gruplama yapılıyor. Daha sonra J ile başlayan kaç isim var diye çıktı alınabiliyor.
namespace LookupSample
{
  using System;
  using System.Collections.Generic;
  using System.Linq;

  class Program
  {
    static void Main(string[] args)
    {
      List<string> names = new List<string>();
      names.Add("Smith");
      names.Add("Stevenson");
      names.Add("Jones");

      ILookup<char, string> namesByInitial = names.ToLookup(n => n[0]);

      // count the names
      Console.WriteLine("J's: {0}", namesByInitial['J'].Count());
      Console.WriteLine("S's: {0}", namesByInitial['S'].Count());
      Console.WriteLine("Z's: {0}", namesByInitial['Z'].Count());
    }
  }
}
Örnek
Şöyle yapraız.
List<Dictionary<string, byte[]>> commonFileCollection = ...;
{
  Dictionary<string, Byte[]> _dickeyValuePairs = 
   commonFileCollection.SelectMany(x=> x)alo
    .ToLookup(x=> x.Key, x=> x.Value); //ILookup<string, IEnumerable<byte[]>>
}


8 Nisan 2018 Pazar

Linq Sorting Metodları

Giriş
Sıralama metodları bir diziyi verilen kritere göre sıralarlar.

OrderBy
Örnek
OrdreBy stable sorting sağlar. Şöyle yaparız.
var arr = new int[] { 1, 2, 3 };
var arr2 = arr.OrderBy(x => x == 2).ToArray();
// arr2 --> 1, 3, 2
Örnek
Şöyle yaparız.
list.OrderBy(p => p.Gender)
Örnek
Birden çok alana göre sıralamak için şöyle yaparız.
list.OrderBy(p=>p.Gender).ThenBy(p=>p.FirstName);
OrderByDescending
Kendi karşılaştırma sınıfımı kullanabilirim. Şöyle yaparız.
List<Foo> list = new List<Foo> {...};
IEnumerable<Foo> result =  
        list.OrderByDescending(f => f, new SpecialComparer());
Comparer sınıfı şöyledir.
public class SpecialComparer : IComparer<Foo>
{
  public int Compare(Foo f1, Foo f2)
  {
    if (f1 == f2)
      return 0;
    else if (f1 > f2)
      return 1;
    else
      return -1;
    }
}
ThenBy
Bu metod sadece IOrderedEnumerable arayüzünde bulunur. IEnumerable arayüzünde yoktur. IEnumerable arayüzünü IOrderedEnumerable arayüzüne çevirmek kolaydır. Sadece şöyle yaparız.
var orderedItems = list.OrderBy(_ => 1);
Bu arayüzü aldıktan sonra ikinci, üçüncü kritere göre dizmesi kolaydır. Şöyle yaparız.
orderedItems = orderedItems.ThenBy(listItem => listItem.Item1);
ThenByDescending
Örnek ver

Reverse
Örnek ver

5 Mart 2018 Pazartesi

Linq Filtering Metodları

Giriş
Süzme metodları elemanları belli bir koşula göre elerler.

OfType metodu
Cast() ve OfType() benzeşirler.

Örnek
Şöyle yaparız.
foreach (TextBox c in Controls.OfType<TextBox>())
{
  ...
}
Örnek
Elimizde bir dynamic listesi olsun
var dlist = new List<dynamic>()
{
    "test",
    "test2",
    "test3"
};
Şöyle yaparız.
var strings = dlist.OfType<string>().ToList();
Where metodu
Where ile kullanılan predicate indeks alabilir. Açıklaması şöyle.
Filters a sequence of values based on a predicate. Each element's index is used in the logic of the predicate function.
Şöyle yaparız.
var list = new List<string> { "a", "b", "c" }

var items = list.Where((item, index) => item == "b" && index == 1)