PDA

View Full Version : معادل این Sql-Query در LINQ چیست؟



davoodrm666_666
سه شنبه 24 آذر 1388, 09:54 صبح
سلام آقا معادل Query زیر در LINQ چیه البته من شنیدم که LINQ توی Aggregate Function ها یه مقداری ضعیف است


SELECT Goruh.GrupCode, MAX(Goruh.NmeGrup) AS MaxNmeGrup, MAX(kala.codkala) AS Maxcodkala
FROM Goruh LEFT OUTER JOIN kala ON Goruh.GrupCode = kala.GrupCode
WHERE Goruh.GrupCode = 1
GROUP BY kala.GrupCode, Goruh.NmeGrup, Goruh.GrupCode
ORDER BY Goruh.GrupCode

hdv212
جمعه 27 آذر 1388, 17:29 عصر
دوست عزیزم سلام
متاسفانه چون من دیتابیس شما رو ندارم . دقیقا نمیدونم از کدوم فن آوری Linq استفاده میکنید (LinqToEntities یا LinqToSql) نمیتونم دقیقا دستور دقیق رو بهت بگم، ولی شاید این نمونه دستور کمکت کنه :


(from c in Customers
join o in Orders on c equals o.Customer into gj
where c.Country == "USA"
from subSet in gj.DefaultIfEmpty()
select new { Customer = c.CustomerID,
Order = subSet == null ? 0:subSet.OrderID,
Cnt = c.Orders.Count(),
Min = c.Orders.Min(o => o.Freight),
Max = c.Orders.Max(o => o.Freight)} ).
GroupBy(c => c.Customer)

این یک نمونه دستور Linq هست که از دیتابیس Northwind کوئری میگیره. این دستور تعداد سفارشات، بیشترین و کمترین سفارش هر مشتری از مشتریانی که از کشور آمریکا هستند رو نشون میده، در ضمن ممکنه یک مشتری هیچ سفارشی نداشته باشه، اما به دلیل Left Join در نتیجه نشان داده میشه، برای شبیه سازی Left Join میتونید با استفاده از متد DefaultIfEmpty() مربوط به نیتجه ی Group Join تون این کار رو انجام بدید. اطلاعات بیشتر... (http://msdn.microsoft.com/en-us/library/bb397895.aspx)
موفق باشید.

majid325
شنبه 28 آذر 1388, 09:27 صبح
میتونید با استفاده از کوئری آنالایزر تمام کوئری های که روی سرور اجرا میشن رو ببینید.
با Linq کوئری رو اجرا کنید و در کوئری آنالایزر کوئری رو با سینتکس T-SQL ببینید.

hdv212
شنبه 28 آذر 1388, 20:18 عصر
میتونید با استفاده از کوئری آنالایزر تمام کوئری های که روی سرور اجرا میشن رو ببینید.
با Linq کوئری رو اجرا کنید و در کوئری آنالایزر کوئری رو با سینتکس T-SQL ببینید.

ابزار LinqPad (http://linqpad.net/) بسیار مناسب برای یادگیری دستور زبان Linq می باشد و می تواند به زبانهای Sql و IL و Lamda Expression نمایش دهد.

davoodrm666_666
یک شنبه 29 آذر 1388, 11:24 صبح
دوستان با کمی جستجو یافتم جواب را


From t In db.Goruh _
Group Join t0 In db.Kala On New With { t.GrupCode } Equals New With { t0.GrupCode } Into t0_join = Group _
From t0 In t0_join.DefaultIfEmpty() _
Group New With {t0, t} By _
t0.GrupCode, _
t.NmeGrup, _
Column1 = t.GrupCode _
Into g = Group _
Order By _
Column1 _
Select _
GrupCode = CType(Column1,system.int32?), _
MaxNmeGrup = g.Max(Function(p) p.t.NmeGrup), _
Maxcodkala = g.Max(Function(p) p.t0.Codkala) _