איך ליצור שאילתת join בlinq to Object
-
החלטתי לנסות לכתוב קצת לתועלת הדורות הבאים (אם בכלל יהיו כאלה שעוד ישתמשו בזה כי הרי כולם היום משתמשים בSQL :lol: :lol: )
אז חיפשתי היום אצל הרב גוגל שליט"א כיצד אני יוצר את השאילתא הנל (שמטרתה לאחד בין 2 טבלאות ע"פ שדה אחד מקושר)
אני מחפש בליסט של תרומות ע"פ הפרמטרים שהמשתמש מזין, ואח"כ אני רוצה להזין לו את רשימת התורמים שתרמו את התרומות הנ"ל ושביחד עם זאת יוצגו לו גם נתוני התרומה.
(כדי להציג לו רק את רשימת התורמים ללא נתוני התרומה - אין צורך להשתמש בJOIN אלא מספיק לכתוב לולאה מקוננת כך:List<Donor> donorSearch = new List<Donor>() foreach(Donation dona in donatFilter) { foreach(Donor donor in AddTorem.donors) { if (donor.Id == dona.IdDonor) donorSearch.Add(donor); } }
אולם אני רציתי ליצור ליסט חדש שיש בו גם חלק מהמאפיינים של העצם Donor (תורם) וגם חלק מהמאפיינים של העצם (תרומה) Donation.
לכן כתבתי כך:var newlistDonors = from d in donorSearch join o in donatFilter on d.Id equals o.IdDonor select new { d.Id, o.IdDonation, d.FirstName, d.LastName, d.Adress, d.Tel, d.Email, o.SumDonation, o.SumAllDonat, o.StartDonation, o.SumMonthDonat };
נסביר מעט:
בשורה הראשונה אני יוצר משתנה ומגדיר לו שיריץ את השאילתה על ליסט בשם donorSearch (שזהו הליסט של תוצאות החיפוש)
אח"כ אני מגדיר לו שהjoin הוא על ליסט בשם donatFilter כאשר ההשואה בין שני הליסטים תתבצע ע"פ הפרמטר id
ואז אני נותן לו פקודת select שיצור עצם חדש ובתוכו אני בוחר איזה מאפיינים אני רוצה מהעצם של הליסט הראשון ואיזה אני רוצה משל האחרון, והוא מאחד ביניהם ויוצר לי ליסט חדש עם עצם מסוג חדש שכולל את כל המאפיינים הללו.
אח"כ אני לוקח את הליסט החדש שנוצר לי ומציג אותו למשתמש!!פורסם במקור בפורום CODE613 ב10/08/2015 23:36 (+03:00)