Entity üzerinde sql sorgu çalıştırma

var query = “SELECT * FROM Meters WHERE CustomerId = ” + customer.sno + ” ORDER BY MeterName”;
var Meters = entity.Database.SqlQuery<Meter>(query).ToList();

 

context.Database.SqlQuery<myEntityType>(
    "mySpName @param1, @param2, @param3",
    new SqlParameter("param1", param1),
    new SqlParameter("param2", param2),
    new SqlParameter("param3", param3)
);

context.Database.SqlQuery<MyEntityType>("mySpName @param1 = {0}", param1)

return context.Database.SqlQuery<myEntityType>("mySpName {0}, {1}, {2}",
new object[] { param1, param2, param3 });

//Or

using(var context = new MyDataContext())
{
return context.Database.SqlQuery<myEntityType>("mySpName {0}, {1}, {2}",
new object[] { param1, param2, param3 }).ToList();
}

//Or

using(var context = new MyDataContext())
{
object[] parameters =  { param1, param2, param3 };

return context.Database.SqlQuery<myEntityType>("mySpName {0}, {1}, {2}",
parameters).ToList();
}

//Or

using(var context = new MyDataContext())
{  
return context.Database.SqlQuery<myEntityType>("mySpName {0}, {1}, {2}",
param1, param2, param3).ToList();
}

Linq Operatörleri

Linq en çok kullanılan operatörleri

Operatör Açıklama
Where Kısıtlama operatörü
Select / SelectMany Veri kümesi için üye/kolon seçimi operatörü
Take / Skip /  TakeWhile / SkipWhile Verinin pozisyonuna göre parçalama operatörü. Sayfalama (paging) yapılırken faydalanılabilir.
Join / GroupJoin Bir anahtar veri üzerinden veri kümelerini birleştirme operatörü
Concat Veri kümelerini birbirine ekleme operatörü
OrderBy / ThenBy / OrderByDescending / ThenByDescending Sıralama operatörleri
Reverse Bir koleksiyonu ters çeviren sıralama operatörü
GroupBy Bir anahtar veri üzerinden gruplama operatörü
Distinct Tekrarlayan verileri teke indiren operatör
Union / Intersect Veri kümeleri için kesişim yada birleşim operatörü
Except Veri kümeleri için fark operatörü
AsEnumerable IEnumerable<T> tipine dönüşüm operatörü
ToArray / ToList Dizi yada List<T> tipine dönüşüm operatörü
ToDictionary / ToLookup Dictionary<K,T> yada Lookup<K,T> tiplerine dönüşüm operatörü
First / FirstOrDefault / Last / LastOrDefault / Single / SingleOrDefault Veri kümesindeki başlangıç yada bitiş elemanlarını seçme operatörü
ElementAt / ElementAtOrDefault Elemanın pozisyonu tabanlı seçim operatörü
DefaultIfEmpty Veri yoksa ilgili veri tipinin varsayılan değerini döndürme operatörü
Range Belli bir aralığa sahip sayı kümesi oluşturma operatörü
Repeat Bir değerin çoklu tekrarlarından oluşan veri kümesi oluşturma operatörü
Empty Boş veri kümesi oluşturma operatörü
Any/All Bir filtrenin veri kümesinde sağlanıp sağlanmadığını kontrol
Contains Bir elemanın veri kümesindeki varlığını kontrol
Count / LongCount Bir veri kümesindeki belli bir şartı sağlayan yada tüm elemanlarının sayısını hesaplama operatörü
Sum / Min / Max / Average Bir veri kümesindeki belli bir şartı sağlayan yada tüm elemanlar için hesaplama operatörü

Linq to Sql join kullanımı

2 farklı tablomuzda istenilen verileri getirmek için tabloları join ile bağlayabiliriz. Tabi ilişkili tablolar için entity framework‘ün include methodunu kullanmak çok daha kolaydır.

var q1 = from c in dataContext.Customers
         join o in dataContext.Orders on c.CustomerID equals o.CustomerID
         select new
         {
             c.CustomerID,
             c.ContactName,
             o.OrderID,
             o.OrderDate
         };

Bu sorguda müşteri ve sipariş tablosundan CustomerId,ContactName,OrderId ve OrderDate sütunundaki verileri getirmektedir.

Store Procedure T-SQL ile arama

Dinamik arama sorgularında t-sql kullanmak işimizi kolaylaştıracaktır. T-sql kullanmaktaki amaç where kıstaslarının dinamik olarak eklemektir. Fikir edinmeniz için, kullandığım bir t-sql arama sorgusu aşağıdadır. Entity framework ile kullanıldığında sadece sorgulamak istediğim değişkenlere değerlerini göndermem yeterli oluyor.

USE [DatabaseEx]
GO
/****** Object:  StoredProcedure [dbo].[sp_UyeArama]    Script Date: 02/12/2013 11:36:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		Cem ELMA
-- Create date: 07.02.2013
-- Description:	Üyeler tablosunda arama
-- =============================================
ALTER PROCEDURE [dbo].[sp_UyeArama]
@unvan nvarchar(255)=null,
@sicilno nvarchar(20)=null,
@sehir nvarchar(3)=null,
@ilce nvarchar(2)=null,
@semt nvarchar(2)=null,
@meslekkomitekod nvarchar(5)=null,
@isciaralik int=null,
@sermayearalik int=null,
@ortaklik nvarchar(500)=null,
@kayiticindeara nvarchar(255) = null,
@siralamatipi int=null
AS
BEGIN
    SET NOCOUNT ON;
    --Sorgu Tanımlamalar
    Declare @SQLQuery AS NVarchar(4000)

    --Dinamik sorguyu oluşturur
    Set @SQLQuery = 'SELECT * from Table1 WHERE (1=1) ' 
    if @kayiticindeara Is Null
    begin

    if @unvan Is Not Null Set @SQLQuery = @SQLQuery + ' And LOWER(SBFRMUNV) LIKE ''%' + @unvan + '%'''		
    if @sicilno Is Not Null Set @SQLQuery = @SQLQuery + ' And SBSCLKOD LIKE ''%' + @sicilno + '%'''		
    if @sehir Is Not Null Set @SQLQuery = @SQLQuery + ' And SBILKODU LIKE ''%' + @sehir + '%'''
    if @ilce Is Not Null Set @SQLQuery = @SQLQuery + ' And SBILCEKD LIKE ''%' + @ilce + '%'''	
    if @semt Is Not Null Set @SQLQuery = @SQLQuery + ' And SBSEMTKD LIKE ''%' + @semt + '%'''	
    if @meslekkomitekod Is Not Null Set @SQLQuery = @SQLQuery + ' And SBMESKOMKOD = @meslekkomitekod' --Grup
    if @isciaralik Is Not Null
	begin
            SET @SQLQuery = CASE
            WHEN @isciaralik = 25 THEN @SQLQuery + ' And (SBISCSYS >= 5 AND SBISCSYS < 26)'
            WHEN @isciaralik = 50 THEN @SQLQuery + ' And (SBISCSYS >= 26 AND SBISCSYS < 50)'
            WHEN @isciaralik = 200 THEN @SQLQuery + ' And (SBISCSYS >= 50 AND SBISCSYS < 200)'
            WHEN @isciaralik = 201 THEN @SQLQuery + ' And (SBISCSYS >= 200)'
            END
	end
    if @sermayearalik Is Not Null
	begin	
	    SET @SQLQuery = CASE
            WHEN @sermayearalik = 1 THEN @SQLQuery + ' And (SNSRMYTO >= 1000000)'
            WHEN @sermayearalik = 2 THEN @SQLQuery + ' And (SNSRMYTO >= 250000 AND SNSRMYTO < 1000000)'
            WHEN @sermayearalik = 3 THEN @SQLQuery + ' And (SNSRMYTO >= 100000 AND SNSRMYTO < 250000)'
            WHEN @sermayearalik = 4 THEN @SQLQuery + ' And (SNSRMYTO >= 25000 AND SNSRMYTO < 100000)'
            WHEN @sermayearalik = 5 THEN @SQLQuery + ' And (SNSRMYTO >= 5000 AND SNSRMYTO < 25000)'
            WHEN @sermayearalik = 6 THEN @SQLQuery + ' And (SNSRMYTO >= 1 AND SNSRMYTO < 5000)'
            END  
	end
    if @ortaklik Is Not Null Set @SQLQuery = @SQLQuery + ' And LOWER(SBORTAKL) LIKE ''%' + @ortaklik + '%'''		

    end
    else 
    begin
	Set @SQLQuery = @SQLQuery + ' and (LOWER(SBFRMUNV) LIKE ''%' + @kayiticindeara + '%'' 
	    or SBSCLKOD LIKE ''%' + @kayiticindeara + '%''
	    or SBTELEF1 LIKE ''%' + @kayiticindeara + '%''
	    or SBNACEKD LIKE ''%' + @kayiticindeara + '%''
	    or SBTICSCL LIKE ''%' + @kayiticindeara + '%'') '	
    end
    --Sorgu Sıralamasını ekler
    if (@siralamatipi=1) Set @SQLQuery = @SQLQuery + ' Order By SBFRMUNV'
	else Set @SQLQuery = @SQLQuery + ' Order By SBFRMUNV desc'

	--sorguyu çalıştırır
	EXECUTE sp_executesql @SQLQuery
END