UIPath ve LINQ ile Veri Manipülasyonu

UIPath ve LINQ ile Veri Manipülasyonu
UIPath ve LINQ ile Veri Manipülasyonu

LINQ Nedir ve Neden Kullanmalıyız?

Merhaba arkadaşlar, bu yazımda sizlere C# programlama dilinde kullanılan ve veri sorgulama işlemlerini kolaylaştıran LINQ kütüphanesinden bahsedeceğim. LINQ, Language Integrated Query yani Dile Entegre Edilmiş Sorgu anlamına gelir. LINQ sayesinde SQL benzeri bir söz dizimi ile farklı veri kaynakları üzerinde sorgular yapabilir, verileri filtreleyebilir, gruplayabilir, sıralayabilir ve dönüştürebiliriz.

LINQ kütüphanesi, C# 3.0 sürümü ile birlikte gelen bir özelliktir. LINQ kütüphanesi, farklı veri sağlayıcılarıyla uyumlu olarak çalışabilen alt kütüphanelerden oluşur. Bunlar:

  • LINQ to Objects: Bellek içindeki koleksiyonlar üzerinde sorgu yapmamızı sağlar. Örneğin List, Array, Dictionary gibi nesneler üzerinde LINQ kullanabiliriz.
  • LINQ to SQL: SQL Server veritabanı üzerinde sorgu yapmamızı sağlar. Veritabanındaki tabloları ve ilişkileri C# nesnelerine eşler ve bunlar üzerinde sorgu yapmamızı sağlar.
  • LINQ to XML: XML dosyaları üzerinde sorgu yapmamızı sağlar. XML dosyalarını XDocument, XElement gibi nesnelere dönüştürür ve bunlar üzerinde sorgu yapmamızı sağlar.
  • LINQ to DataSet: ADO.NET DataSet nesnesi üzerinde sorgu yapmamızı sağlar. DataSet içindeki DataTable ve DataRow nesneleri üzerinde sorgu yapmamızı sağlar.
  • LINQ to Entities: Entity Framework ile veritabanı üzerinde sorgu yapmamızı sağlar. Veritabanındaki tabloları ve ilişkileri Entity nesnelerine eşler ve bunlar üzerinde sorgu yapmamızı sağlar.

LINQ kütüphanesinin en büyük avantajlarından biri, kod okunabilirliğini artırmasıdır. Karmaşık ve uzun kod satırlarını tek bir satırda yazabiliriz. Ayrıca LINQ kütüphanesi, derleme zamanında hata kontrolü yapar ve böylece çalışma zamanında karşılaşabileceğimiz hataları önler.

LINQ kütüphanesi ile sorgu yazmak için iki farklı yöntem vardır: Sorgu söz dizimi (Query syntax) ve Yöntem söz dizimi (Method syntax). Sorgu söz dizimi SQL’e daha yakın bir şekilde yazılırken, yöntem söz dizimi C#’ın genel söz dizimine uygun olarak yazılır. Her iki yöntem de aynı sonucu verir ancak tercih meselesidir.

Örneğin UIPath ve LINQ ile Veri Manipülasyonu aşağıdaki kodda bir ürün listesi üzerinde fiyatı 100 TL’den büyük olan ürünleri seçmek için hem sorgu söz dizimi hem de yöntem söz dizimi kullanılmıştır.

csharp
// Sorgu söz dizimi
var query = from p in products
where p.Price > 100
select p;

// Yöntem söz dizimi
var query = products.Where(p => p.Price > 100);

UIPath ve LINQ ile Veri Manipülasyonu Nasıl Kullanılır?

UIPath ve LINQ kullanımını destekleyen bir Robotic Process Automation (RPA) aracıdır. LINQ kullanarak, verileri filtreleme, sıralama, gruplama ve dönüştürme işlemlerini gerçekleştirebilirsiniz.

LINQ sorgularını UIPath Studio’da kullanmak için şu adımları izleyebilirsiniz:

  1. Bir değişken oluşturun ve verilerinizi depolayın. Bu veriler bir veritabanından, Excel dosyasından, bir web servisinden veya başka bir veri kaynağından gelebilir.
  2. LINQ sorgunuzu yazın. Bu sorgu, verilerinizin işleneceği işlemi tanımlar. Örneğin, bir Excel tablosundan bir sütunu seçmek için aşağıdaki sorguyu kullanabilirsiniz:(From row In dtExcel.AsEnumerable() Select row.Field(Of String)("ColumnName")).ToList() Burada, dtExcel değişkeni Excel tablosunu temsil eder ve “ColumnName” sütununun değerleri seçilir.
  3. LINQ sorgusunu UIPath Workflow’una ekleyin. Bunun için, bir “Assign” aktivitesi kullanabilirsiniz. Değişken adı bölümüne yeni bir değişken adı yazın ve değer bölümüne LINQ sorgunuzu ekleyin.
  4. LINQ sorgunuzun sonucunu kullanın. LINQ sorgunuzun sonucunu başka bir değişkene atayabilir veya işleme devam etmek için doğrudan kullanabilirsiniz.

UIPath ve LINQ kullanımı oldukça esnektir ve iş akışınızın gereksinimlerine göre uyarlanabilir. LINQ sorgularını kullanarak verilerinizi işlemek, kodunuzu daha okunaklı ve bakımı daha kolay hale getirir.

Tablolar ve veriler değişken olarak varsayılmaktadır.

UIPath ve LINQ ile Veri Manipülasyonu İçin En İyi Uygulamalar

LINQ KoduAçıklamaÖrnek
WhereBir koşula göre filtreleme yapar.numbers.Where(Function(n) n Mod 2 = 0)
OrderByBelirtilen bir sıralama ölçütüne göre sıralama yapar.employees.OrderBy(Function(emp) emp.Salary)
SelectVerileri belirli bir özelliğe göre seçer veya yeniden adlandırır.employees.Select(Function(emp) emp.Name)
GroupByBelirli bir özelliğe göre verileri gruplar.employees.GroupBy(Function(emp) emp.Department)
Joinİki veya daha fazla veri kümesini birleştirir.customers.Join(orders, Function(c) c.Id, Function(o) o.CustomerId, Function(c, o) New With { .Customer = c, .Order = o })
AggregateVerileri toplamak veya diğer matematiksel işlemleri gerçekleştirmek için kullanılır.numbers.Aggregate(Function(acc, n) acc + n)
Unionİki veri kümesinin benzersiz öğelerini birleştirir.list1.Union(list2)
Concatİki veri kümesinin tüm öğelerini birleştirir.list1.Concat(list2)
CountBir veri kümesindeki öğelerin sayısını hesaplar.numbers.Count()
SkipVeri kümesinde belirtilen sayıda öğeyi atlar.numbers.Skip(5)
TakeBelirli bir sayıda öğeyi veri kümesinden seçer.numbers.Take(3)
FirstOrDefaultİlk öğeyi seçer, ancak öğe yoksa null değer döndürür.numbers.FirstOrDefault()
LastOrDefaultSon öğeyi seçer, ancak öğe yoksa null değer döndürür.numbers.LastOrDefault()
AnyBir veri kümesinde en az bir öğe olup olmadığını kontrol eder.numbers.Any(Function(n) n > 10)
AllTüm öğelerin belirtilen koşulu karşılayıp karşılamadığını kontrol eder.numbers.All(Function(n) n > 0)
AndAlso, OrElseBirden fazla koşula göre filtreleme yapmak için kullanılır.employees.Where(Function(emp) emp.Department = “Sales” AndAlso emp.Salary > 5000)
UIPath ve Linq Veri Manipülasyonu Kodları

UIPath ve LINQ ile Veri Manipülasyonu Detaylı Örnekler :

UIPath ve LINQ , bir veri tablosundan veya koleksiyondan bir alt küme seçmek için LINQ sorguları kullanarak “Where” ifadesi kullanabilirsiniz. “Where” ifadesi, veri tablosundaki her bir öğeyi bir koşula göre filtreleyerek, yalnızca koşula uyan öğeleri içeren yeni bir koleksiyon döndürür.

UIPath’ta “Where” ifadesi kullanımı için örnek bir iş akışı şöyle olabilir:

  1. “Read Range” aktivitesini kullanarak bir Excel dosyası okuyun ve bir “DataTable” değişkeni oluşturun.
  2. LINQ sorgularını kullanarak “Where” ifadesini içeren bir işlem yapmak için bir “Assign” aktivitesi ekleyin.
  3. “Assign” aktivitesinde, “DataTable” değişkeni üzerinde “Where” ifadesini kullanarak belirli bir koşula göre filtreleme yapın.
  4. Filtrelenmiş verileri başka bir “DataTable” değişkeninde depolayın.
  5. Filtrelenmiş verileri işlemek için başka aktiviteler ekleyin veya sonuçları bir Excel dosyasına yazdırmak için “Write Range” aktivitesini kullanın.

Örneğin, bir “DataTable” değişkenindeki tüm öğeleri seçmek yerine, sadece belirli bir koşulu karşılayan öğeleri seçmek için aşağıdaki kodu kullanabilirsiniz:

lessCopy codedt.AsEnumerable().Where(Function(row) row.Field(Of String)("Bölüm") = "Satış").CopyToDataTable()

Bu kod, “dt” isimli “DataTable” değişkenindeki “Bölüm” sütununda “Satış” olan tüm öğeleri seçer ve sonuçları yeni bir “DataTable” değişkeninde depolar.

AçıklamaKod
“Doğum Tarihi” sütununda yılları 1995 ile 2001 arasında olan kişileri seçerdt.AsEnumerable().Where(Function(row) CInt(row(“Doğum Tarihi”).ToString().Substring(6)) >= 1995 AndAlso CInt(row(“Doğum Tarihi”).ToString().Substring(6)) <= 2001).CopyToDataTable()
“İşe Giriş Tarihi” 03.01.2020 ile 02.01.2023 tarihleri arasında olan ve cinsiyeti erkek olan kişileri seçerdt.AsEnumerable().Where(Function(row) DateTime.ParseExact(row(“İşe Giriş Tarihi”).ToString(), “dd.MM.yyyy”, CultureInfo.InvariantCulture) >= New DateTime(2020, 1, 3) AndAlso DateTime.ParseExact(row(“İşe Giriş Tarihi”).ToString(), “dd.MM.yyyy”, CultureInfo.InvariantCulture) <= New DateTime(2023, 1, 2) AndAlso row(“Cinsiyet”).ToString() = “Erkek”).CopyToDataTable()
“Çıkış Tarihi” boş olan ve “Meslek Grubu” “Stajyer” olanları silerdt.AsEnumerable().Where(Function(row) String.IsNullOrEmpty(row(“Çıkış Tarihi”).ToString()) AndAlso row(“Meslek Grubu”).ToString() = “Stajyer”).CopyToDataTable()
“Çıkış Tarihi” geçen ay olan ve “Meslek Grubu” “Stajyer” olmayanları seçerdt.AsEnumerable().Where(Function(row) Not String.IsNullOrEmpty(row(“Çıkış Tarihi”).ToString()) AndAlso DateTime.ParseExact(row(“Çıkış Tarihi”).ToString(), “dd.MM.yyyy”, CultureInfo.InvariantCulture) >= DateTime.Now.AddMonths(-1) AndAlso row(“Meslek Grubu”).ToString() <> “Stajyer”).CopyToDataTable()
“İşe Giriş Tarihi” geçen ay olan ve “Meslek Grubu” “Stajyer” ve “Yönetici” olmayanları seçerdt.AsEnumerable().Where(Function(row) DateTime.ParseExact(row(“İşe Giriş Tarihi”).ToString(), “dd.MM.yyyy”, CultureInfo.InvariantCulture) >= DateTime.Now.AddMonths(-1) AndAlso row(“Meslek Grubu”).ToString() <> “Stajyer” AndAlso row(“Meslek Grubu”).ToString() <> “Yönetici”).CopyToDataTable()
“Satış” sütunundaki verileri toplardt.AsEnumerable().Sum(Function(row) Convert.ToDouble(row(“Satış”).ToString()))
Uipath ile Linq Örnekleri

UIPath’ta Veri Manipülasyonu İçin LINQ Örnekleri

Filter (Filtreleme)

UIPath ve LINQ ile Veri Manipülasyonu kullanarak bir veri kümesinden öğeleri filtreleyebilirsiniz. Örneğin, bir Excel tablosundaki sadece belirli bir koşulu karşılayan satırları alabilirsiniz. Aşağıdaki örnek, “Age” sütununda 20’den küçük olanları seçer:

sqlCopy code(From row In dtExcel.AsEnumerable()
 Where row.Field(Of Int32)("Age") < 20
 Select row).ToList()

Sort (Sıralama)

LINQ sorgularını kullanarak bir veri kümesindeki öğeleri sıralayabilirsiniz. Örneğin, bir Excel tablosundaki “Name” sütununa göre alfabetik olarak sıralayabilirsiniz. Aşağıdaki örnek, “Name” sütununu kullanarak sıralar:

sqlCopy code(From row In dtExcel.AsEnumerable()
 Order By row.Field(Of String)("Name") Ascending
 Select row).ToList()

Group By (Gruplama)

LINQ sorgularını kullanarak bir veri kümesindeki öğeleri belirli bir özellikle gruplayabilirsiniz. Örneğin, bir Excel tablosundaki “City” sütununa göre gruplayabilirsiniz. Aşağıdaki örnek, “City” sütununu kullanarak gruplar:

sqlCopy code(From row In dtExcel.AsEnumerable()
 Group By City = row.Field(Of String)("City") Into CityGroup = Group
 Select New With { .City = City, .Count = CityGroup.Count() }).ToList()

Bu örnek, “City” sütununa göre gruplar ve her bir grup için şehir adını ve grup sayısını hesaplar.

Join (Birleştirme)

UIPath ve LINQ ile Veri Manipülasyonu sorgularını kullanarak iki veri kümesini birleştirebilirsiniz. Örneğin, bir Excel tablosundaki bir sütunu başka bir tablodaki sütunla birleştirebilirsiniz. Aşağıdaki örnek, “Name” sütununu birleştirir:

vbnetCopy code(From row1 In dtExcel1.AsEnumerable()
 Join row2 In dtExcel2.AsEnumerable() On row1.Field(Of String)("ID") Equals row2.Field(Of String)("ID")
 Select New With { .Name = row1.Field(Of String)("Name"), .Country = row2.Field(Of String)("Country") }).ToList()

Bu örnek, “ID” sütunlarını birleştirir ve her bir satır için “Name” ve “Country” sütunlarını seçer.

Select (Seçme)

UIPath ve LINQ ile Veri Manipülasyonu Linq kullanarak bir veri kümesindeki öğelerin belirli özelliklerini seçebilirsiniz. Seçilen özellikler, yeni bir veri kümesi olarak döndürülür. Örneğin, bir Excel tablosundaki sadece belirli sütunları seçebilirsiniz.

Aşağıdaki örnek, “İsim” ve “Yaş” sütunlarını seçer ve yeni bir veri kümesi olarak döndürür:

sqlCopy code(From row In dtExcel.AsEnumerable()
 Select New With { .Name = row.Field(Of String)("İsim"), .Yas= row.Field(Of Int32)("Yaş")}).ToList()

Bu örnek, “İsim” ve “Yas” sütunlarını seçer ve bu özellikleri yeni bir veri kümesindeki her bir öğeyle eşleştirir.

Aggregate (Toplama)

UIPath ve LINQ ile Veri Manipülasyonu sLINQ kullanarak bir veri kümesindeki öğelerin toplamını, en küçük veya en büyük öğesini, ortalama değerini vb. hesaplayabilirsiniz. Örneğin, bir Excel tablosundaki “Age” sütunundaki öğelerin toplamını hesaplayabilirsiniz.

Aşağıdaki örnek, “Yaş” sütunundaki tüm öğelerin toplamını hesaplar:

sqlCopy code(From row In dtExcel.AsEnumerable()
 Select row.Field(Of Int32)("Yaş")).Sum()

Bu örnek, “Yaş” sütunundaki öğelerin toplamını hesaplar.

Ayrıca, “Max”, “Min” ve “Average” işlevleri gibi diğer toplama işlevleri de kullanılabilir. Aşağıdaki örnekler, “Yaş” sütunundaki en büyük ve en küçük öğeleri hesaplar:

sqlCopy code(From row In dtExcel.AsEnumerable()
 Select row.Field(Of Int32)("Yaş")).Max()
sqlCopy code(From row In dtExcel.AsEnumerable()
 Select row.Field(Of Int32)("Yaş")).Min()

Bu örnekler, “Age” sütunundaki en büyük ve en küçük öğeleri hesaplar.

UIPath’ta LINQ sorgularını kullanarak veri manipülasyonu yapmanın birçok yolu vardır. Bu örnekler, LINQ sorgularını kullanarak belirli bir veri kümesindeki öğeleri seçmenin ve hesaplamanın sadece birkaç yolunu göstermektedir.

UIPath ve LINQ ile Veri Manipülasyonu İçin LINQ Örnekleri

CSV Dosyaları İçin Okuma ve Yazma

UIPath ve LINQ ile Veri Manipülasyonu LINQ kullanarak bir CSV dosyasındaki verileri okuyabilir ve yazabilirsiniz. Örneğin, bir CSV dosyasındaki verileri bir DataTable’a okuyabilirsiniz. Aşağıdaki örnek, “input.csv” adlı bir CSV dosyasındaki verileri DataTable’a yükler:

arduinoCopy code(From line In File.ReadLines("input.csv")
 Let x = line.Split(","c)
 Select dt.NewRow().ItemArray = x).CopyToDataTable()

Bu örnek, her bir satırı bir diziye ayırır ve bu dizileri yeni bir DataTable’a yükler.

Ayrıca, bir DataTable’daki verileri bir CSV dosyasına yazabilirsiniz. Aşağıdaki örnek, bir DataTable’daki verileri “output.csv” adlı bir CSV dosyasına yazar:

vbnetCopy codeFile.WriteAllLines("output.csv", (From row In dtExcel.AsEnumerable()
 Select String.Join(",", row.ItemArray)).ToArray())

Bu örnek, her bir satırdaki öğeleri bir diziye ekler ve bu dizileri bir CSV dosyasına yazar.

Excel Dosyaları İçin Okuma ve Yazma

LINQ kullanarak bir Excel dosyasındaki verileri okuyabilir ve yazabilirsiniz. Örneğin, bir Excel dosyasındaki bir çalışma sayfasındaki verileri bir DataTable’a okuyabilirsiniz. Aşağıdaki örnek, “input.xlsx” adlı bir Excel dosyasındaki “Sheet1” çalışma sayfasındaki verileri DataTable’a yükler:

sqlCopy code(From row In dtExcel.AsEnumerable()
 Select row).ToList()

Bu örnek, “input.xlsx” dosyasındaki “Sheet1” çalışma sayfasındaki verileri DataTable’a yükler.

Ayrıca, bir DataTable’daki verileri bir Excel dosyasına yazabilirsiniz. Aşağıdaki örnek, bir DataTable’daki verileri “output.xlsx” adlı bir Excel dosyasına yazar:

cssCopy codeWriteRange activity ile yapılan Excel dosyasına yazma işlemi

Bu örnek, bir DataTable’daki verileri “output.xlsx” adlı bir Excel dosyasına yazar. “WriteRange” aktivitesi kullanılarak, DataTable verileri “Sheet1” çalışma sayfasına yazılır.

Bu örnekler, LINQ sorgularını kullanarak UIPath’ta CSV ve Excel dosyalarındaki verileri okumanın ve yazmanın birkaç yolunu göstermektedir.UIPath ve LINQ ile Veri Manipülasyonu yazımızda sizlere detaylı olarak açıklamalar sağlamaya çalıştık. Eğer sizlerde Regex Hakkında bilgi almak isterseniz BURADAN ulaşabilirsiniz.

Kaynaklar :

https://forum.uipath.com/t/linq-tutorials/398870

https://learn.microsoft.com/tr-tr/dotnet/csharp/programming-guide/concepts/linq/

Kategori:

Etiketler:

,