משיב מוביל
שאלה בשאילתת linq sql

שאלה
-
האם יש אפשרות בתנאי של שאילתא לאפשר ששדה מסוים -לא משנה מה הוא יהיה שווה - מה יהיה ערכו .כדי ששאילתא תוכל להיות כללית , כלומר לפעמים יוצב ערך בשדה ולפעמים לא... לדוגמא :סינון של גריד לפי כמה שדות, הערכים נשלחים ע"י מה שממלא המשתמש בתיבות טקסט , תיבת טקסט של שם פרטי לדוגמא, לפעמים יכולה להיות מלאה ולפעמים ריקה...אני רוצה שאם היא ריקה, כלומר המשתמש לא מילא אותה , הוא ישלח אותה לפונקצית סינון באופן שבסינון יתעלם משדה זה - כלומר יכול להיות שווה לכל ערך...האם יש פתרון לכך בדרך זו או אחרת? כלומר לכתוב פעם אחת באופן כללי את השאילתא ולא לכתוב את השאילתא מספר פעמים כמספר התנאים?
חני זהב
תשובות
-
אני לא חושב שאת צריכה בניית שאילתות דינמית, כי לפי מה שתיארת אז כל הגמישות הנדרשת היא השמטת מסנן הידוע בזמן כתיבת הקוד.
לדעתי את צריכה לכתוב קוד בסגנון כזה:
var query = from e in UIFrance.Data.Center.DataContext.Persons where (string.IsNullOrWhiteSpace(txtBox1.Text) || e.FirstName == txtBox1.Text) && (string.IsNullOrWhiteSpace(txtBox2.Text) || e.LastName == txtBox2.Text) && (string.IsNullOrWhiteSpace(txtBox3.Text) || e.Address == txtBox3.Text) select e;
קוד הSQL שנוצר ייראה לדעתי בסגנון:
WHERE (TRUE OR FirstName = '') AND (FALSE OR LastName = 'bla bla')
מה שנותן את מה שרצית.
כל התגובות
-
נראה לי שמה שאת מחפשת נקר
dynamic linq
http://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library
- הוצע כתשובה על-ידי pituachMVP, Moderator יום שני 26 ינואר 2015 17:30
-
-
ערב טוב חני,
אני לא כל כך יודע מה להוסיף. הקישור מסביר את הדברים בצורה מאוד ברורה עם דוגמאות.
נסי בבקשה להנבהיר היכן נתקלת בבעיה. תעברי על הקישור לעומק (אני ממליץ לא להתבייש להעזר בתרגום של גוגל כשצריך) ותנסה לבצע את הדבירם בפרוייקט חדש ולא בפרויקט שלך שכב בטח מורכב וכלל עוד דברים.אם את יכולה להצביע על נקודות מסויימות שהן נתקלת בבעיה אנא פרטי ואפם תוכלי לצרף את הפרויטק בו ניסית לבצע את הדברים, אז יהיה יותר קל לעוב ולדון במה שניסית לבצע.
Ronen Ariely
[Personal Site] [Blog] [Facebook] -
אני לא חושב שאת צריכה בניית שאילתות דינמית, כי לפי מה שתיארת אז כל הגמישות הנדרשת היא השמטת מסנן הידוע בזמן כתיבת הקוד.
לדעתי את צריכה לכתוב קוד בסגנון כזה:
var query = from e in UIFrance.Data.Center.DataContext.Persons where (string.IsNullOrWhiteSpace(txtBox1.Text) || e.FirstName == txtBox1.Text) && (string.IsNullOrWhiteSpace(txtBox2.Text) || e.LastName == txtBox2.Text) && (string.IsNullOrWhiteSpace(txtBox3.Text) || e.Address == txtBox3.Text) select e;
קוד הSQL שנוצר ייראה לדעתי בסגנון:
WHERE (TRUE OR FirstName = '') AND (FALSE OR LastName = 'bla bla')
מה שנותן את מה שרצית.
-
-