PDA

View Full Version : مبتدی: سوال linq



mina68
سه شنبه 23 اسفند 1390, 10:20 صبح
با عرض سلام خدمت دوستان و اساتید محترم
می خوام تمام رکورد هایی از یک table رو داشته باشیم به شرطی که یک فیلدش تو Arraylist که از قبل دارم وجود داشته باشه.
چطور میشه با دستورات linq این کاررو بکنم؟:متفکر:

Hybrid
سه شنبه 23 اسفند 1390, 10:32 صبح
دوست عزیز سلام ،

سوالت یه کم مبهمه اگه میشه سوالت رو واضحتر بپرس. در ضمن داخل این تالار بپرسی زودتر به جوابت میرسی :

دسترسی به داده ها (ADO.Net و LINQ و ...) (http://barnamenevis.org/forumdisplay.php?144-%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D8%A8%D9%87-%D8%AF%D8%A7%D8%AF%D9%87-%D9%87%D8%A7-%28ADO.Net-%D9%88-LINQ-%D9%88-...%29)

mina68
سه شنبه 23 اسفند 1390, 11:20 صبح
فرض کنید یک arraylist داریم که توش یه سری کد فرض کنید از کد 1 تا 50 نگه داری شده و یک Table داریم که فیلدی به نام code داره حالا می خوام تمام رکورد هایی از table رو داشته باشیم که فیلد کدش تو Arraylist موجود باشه!

mina68
چهارشنبه 24 اسفند 1390, 08:58 صبح
فکر نمی کنم سوالم خیلی هم نامفهوم باشه!!:ناراحت:

فرید نجفلو
چهارشنبه 24 اسفند 1390, 11:33 صبح
مفهوم شد::چشمک:
تو کد زیر Query رو برای دیتا بیس اجرا کنید:


Dim lstCode As New List(Of String)
lstCode.Add("1")
lstCode.Add("2")
lstCode.Add("3")
'...
lstCode.Add("50")
Dim WhereCondt As String = ""
For Each Code In lstCode
WhereCondt &= "'" & Code & "'"
If lstCode.IndexOf(Code) < lstCode.Count - 1 Then
WhereCondt &= ","
End If
Next
Dim Query = "Select * From Table1 Where Code IN (" & WhereCondt & ")"

mina68
چهارشنبه 24 اسفند 1390, 13:01 عصر
خیلی متشکرم آقا فرید
ولی همین query
Dim Query = "Select * From Table1 Where Code IN (" & WhereCondt & ")"
با linq چه طوری میشه؟!
و اینکه شما همه لیست رو تبدیل به یک رشته کردین آیا از راهی هست که از خود لیست تو Query استفاده بشه؟
البته منظورم با کد linq هست!

فرید نجفلو
چهارشنبه 24 اسفند 1390, 16:08 عصر
بله متاسفم من به نام تاپیک شما توجه نکرد:اشتباه:
به فرض اینکه شما کلاس LINQ to SQL رو (با پسوند dbml) اضافه کردید و حاوی Table1 هست و نمونه از اون رو با اسم LINQtoSQLDataContext ایجاد کردید(با New)

Dim lstCode As New List(Of String) From {"1", "2", "3"}
Dim LinqRes = (From aRow In LINQtoSQLDataContext.Table1 Select aRow Where lstCode.Contains(aRow.Code))

فوق العاده راحت و سر راست:لبخندساده:

اگه شما LINQ to SQL رو برای استفاده انتخاب کردید همین جا باید بهتون تبریک بگم(تکنولوژی فوق العاده ای رو انتخاب کردید)
همین جا قدرتش معلوم میشه (مقایسه دو نمونه کد بنده و در حالی که در نمونه اول دستورات اجرای ADO.NET هم باید اضافه بشه!!!)

و اگه از DataTable پر شده توسط ADO.NET استفاده می کنید:
Dim LinqRes = (From aRow As DataRow In Table1 Select aRow Where lstCode.Contains(aRow("Code"))

Hasibsoft
چهارشنبه 24 اسفند 1390, 18:42 عصر
یک نمونه مثال دیگه با استفاده از دستور Join


Dim arr As New ArrayList From {10, 12, 4}
Dim Tbl As New DataTable
Tbl.Columns.Add("Code", GetType(Integer))
Tbl.Columns.Add("Name")
Tbl.Rows.Add(15, "Ali")
Tbl.Rows.Add(10, "Hasan")
Tbl.Rows.Add(4, "Akbar")
Tbl.Rows.Add(5, "Ehsan")
Tbl.Rows.Add(12, "Reza")
Tbl.Rows.Add(3, "Elham")
Dim result = From Row As DataRow In Tbl.Rows Join Num As Integer In arr
On Row("Code") Equals Num Select Row
For Each Row As DataRow In result
Console.WriteLine(Row("Code") & " , " & Row("Name"))
Next

hakim22
شنبه 27 اسفند 1390, 15:43 عصر
من خودم همیشه از LINQ استفاده می کنم اما فکر کنم راه حل شما کمی ساده تر باشه
اگر از ArrayList.Contains استفاده کنی می تونی به راحتی بهمی که آیا کد(عدد یا شی) در لیست آرایه ای موجود هست یا نه

اینطوری با یک حلقه که در برای تیبل اجرا می کنی برای هر ایندکسش چک می کنی که آیا ArrayList.Contains درست هست یا نه
و برای هر بار که مقدار true برگشت کنه معلوم میشه که آیا مقدار اون ایندکس تیبل در لیست کوجوده یا نه

فرید نجفلو
شنبه 27 اسفند 1390, 15:54 عصر
من خودم همیشه از LINQ استفاده می کنم اما فکر کنم راه حل شما کمی ساده تر باشه
اگر از ArrayList.Contains استفاده کنی می تونی به راحتی بهمی که آیا کد(عدد یا شی) در لیست آرایه ای موجود هست یا نه

اینطوری با یک حلقه که در برای تیبل اجرا می کنی برای هر ایندکسش چک می کنی که آیا ArrayList.Contains درست هست یا نه
و برای هر بار که مقدار true برگشت کنه معلوم میشه که آیا مقدار اون ایندکس تیبل در لیست کوجوده یا نه

دوست عزیز
ایشون برای جدا کردن اطلاعات از حلقه استفاده نمی کنن(بیشتر دقت کنید می فهمید)
حلقه آخری که ایشون گذاشتن جهت نمایش اطلاعات در کنسوله که باید در کد اصلی پاک بشه(فقط جهت تاکید بر صحت عملیات گذاشته شده!)
کد اصلی ایشون این خطه (بقیه جهت آموزش و توانایی در تسته):
Dim result = From Row As DataRow In Tbl.Rows Join Num As Integer In arr _
On Row("Code") Equals Num Select Row