ورود

View Full Version : سوال: نحوه استفاده از پروسیجر یا join در LINQ



mustafaehsani
چهارشنبه 04 اردیبهشت 1392, 18:03 عصر
با سلام عزیزان خواهشا کمک کنند سه چهار روزه سرکارم
یه دیتابیس با چهار جدول به صورت زیر

103273

همونطور که توی شکل هم معلومه براش یه پروسیجر واسه join جدولهام نوشتم اما نمیدونم با چه دستور و به چه صورت بنویسم البته کدهای زیر رو امتحان کردم

DataClassesDataContext db = new DataClassesDataContext() ;
db.Syl_join(iD:Label1.Text);

GridView2.DataSource = db.Syl_join(iD: Label1.Text.ToString());
GridView2.DataBind();
}

که error زیر رو میده

103274

کد sql پروسیجرم که البته مطمئنم درسته چون توی خود sql جواب داد. متغیر ID هم از label1.text میگیره

ALTER PROCEDURE [dbo].[Syl_join]
@ID nchar(10)
AS
SELECT dbo.Teacher.Family, dbo.Teacher.Name, dbo.Credit.Name AS Expr1
FROM dbo.Credit INNER JOIN
dbo.Syllabus ON dbo.Credit.ID = dbo.Syllabus.[Credit ID] INNER JOIN
dbo.Student ON dbo.Syllabus.[Student ID] = dbo.Student.ID INNER JOIN
dbo.Teacher ON dbo.Syllabus.[Teacher ID] = dbo.Teacher.ID where dbo.Student.ID=@ID
RETURN

amirsajjadi
چهارشنبه 04 اردیبهشت 1392, 18:40 عصر
UserName رو پیدا نکرده به خاطر همین مقدار تهی رو برمیگردونه و وقتی میخوای به رشته تبدیلش کنی خطا میده. الان دقیقا میخوای کد sqlی که گذاشتی رو به linq تیبدیل کنی؟

mustafaehsani
چهارشنبه 04 اردیبهشت 1392, 19:02 عصر
UserName رو پیدا نکرده به خاطر همین مقدار تهی رو برمیگردونه و وقتی میخوای به رشته تبدیلش کنی خطا میده. الان دقیقا میخوای کد sqlی که گذاشتی رو به linq تیبدیل کنی؟

یا کد تبدیل به linq بشه یا کدی که بشه از این پروسیجر استفاده کرد ممنون میشم کمک کنی

mustafaehsani
چهارشنبه 04 اردیبهشت 1392, 19:05 عصر
UserName رو پیدا نکرده به خاطر همین مقدار تهی رو برمیگردونه و وقتی میخوای به رشته تبدیلش کنی خطا میده.

آخه تا استارت رو میزنم این error رو میده اجازه نمیده داده بهش بدم

نکته خیلی مهم اینکه تا کد پروسیجر رو ننویسم قسمت اول برنامه که لاگین شدنه کار میکنه

amirsajjadi
پنج شنبه 05 اردیبهشت 1392, 08:12 صبح
اول چک کن ببین که username وجود داره


if context... isnot nothing then ...


دوم اینکه برای مقدار دهی به پروسجر باید از Parameter های GridView استفاده کنی

amirsajjadi
پنج شنبه 05 اردیبهشت 1392, 17:03 عصر
تبدیل پروسجر به linq


Public Class Class1

Public Function GetProc_Syl_join(iD As Integer) As Object
Dim db As New DataClassesDataContext
Dim lnq = From c In db.Credits Join s In db.syllabus On c.ID Equals s.CID _
Join st In db.Students On s.SID Equals st.ID _
Join th In db.Teachers On s.TID Equals th.ID Where st.ID = iD Select CreditName = c.Name, TeacherName = th.Name, TeacherFamily = th.Family
Return lnq
End Function

End Class


میتونی همین تابع رو از طریق ObjectDataSource به گریدویو بدی و پارامتر اون رو به یک شی و یا یک مقدار Bind کنی.


Sub refreshData(id As Integer)
Dim pr As New Parameter("iD", Data.DbType.Int32, id.ToString)

Dim dsData As New ObjectDataSource
dsData.SelectMethod = "GetProc_Syl_join"
dsData.TypeName = "Class1"
dsData.SelectParameters.Clear()
dsData.SelectParameters.Add(pr)

GridView1.DataSource = dsData
GridView1.DataBind()
End Sub

mohammad5593
سه شنبه 30 مهر 1392, 07:29 صبح
تبدیل پروسجر به linq


Public Class Class1

Public Function GetProc_Syl_join(iD As Integer) As Object
Dim db As New DataClassesDataContext
Dim lnq = From c In db.Credits Join s In db.syllabus On c.ID Equals s.CID _
Join st In db.Students On s.SID Equals st.ID _
Join th In db.Teachers On s.TID Equals th.ID Where st.ID = iD Select CreditName = c.Name, TeacherName = th.Name, TeacherFamily = th.Family
Return lnq
End Function

End Class


میتونی همین تابع رو از طریق ObjectDataSource به گریدویو بدی و پارامتر اون رو به یک شی و یا یک مقدار Bind کنی.


Sub refreshData(id As Integer)
Dim pr As New Parameter("iD", Data.DbType.Int32, id.ToString)

Dim dsData As New ObjectDataSource
dsData.SelectMethod = "GetProc_Syl_join"
dsData.TypeName = "Class1"
dsData.SelectParameters.Clear()
dsData.SelectParameters.Add(pr)

GridView1.DataSource = dsData
GridView1.DataBind()
End Sub


باتشکر، دوست عزیز لطفا یک فایل نمونه بگذارید