none
שאלה בשאילתת linq sql RRS feed

  • שאלה

  • האם יש אפשרות בתנאי של שאילתא לאפשר ששדה מסוים -לא משנה מה  הוא יהיה שווה - מה יהיה ערכו .
    כדי ששאילתא תוכל להיות כללית , כלומר לפעמים יוצב ערך בשדה ולפעמים לא... לדוגמא :סינון של גריד לפי כמה שדות, הערכים נשלחים ע"י מה שממלא המשתמש בתיבות טקסט , תיבת טקסט של שם פרטי לדוגמא, לפעמים יכולה להיות מלאה ולפעמים ריקה...
    אני רוצה שאם היא ריקה, כלומר המשתמש לא מילא אותה , הוא ישלח אותה לפונקצית סינון באופן שבסינון יתעלם משדה זה - כלומר יכול להיות שווה לכל ערך...
    האם יש פתרון לכך בדרך זו או אחרת? כלומר לכתוב פעם אחת באופן כללי את השאילתא ולא לכתוב את השאילתא מספר פעמים כמספר התנאים?

    חני זהב

    יום שני 26 ינואר 2015 08:12

תשובות

  • אני לא חושב שאת צריכה בניית שאילתות דינמית, כי לפי מה שתיארת אז כל הגמישות הנדרשת היא השמטת מסנן הידוע בזמן כתיבת הקוד.

    לדעתי את צריכה לכתוב קוד בסגנון כזה:

    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')
             


    מה שנותן את מה שרצית.


    • נערך על-ידי לומדים יום שלישי 27 ינואר 2015 09:46
    • הוצע כתשובה על-ידי לומדים יום שלישי 27 ינואר 2015 09:47
    • סומן כתשובה על-ידי חני זהב יום חמישי 29 ינואר 2015 07:50
    יום שלישי 27 ינואר 2015 09:45

כל התגובות

  • נראה לי שמה שאת מחפשת נקר 

    dynamic linq

    http://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library

    יום שני 26 ינואר 2015 10:46
  • תודה רבה!

    אפשר הסבר קצר על ה-dynamic linq אני לא מוצאת רגלים וידים...


    חני זהב

    יום שני 26 ינואר 2015 11:36
  • ערב טוב חני,

    אני לא כל כך יודע מה להוסיף. הקישור מסביר את הדברים בצורה מאוד ברורה עם דוגמאות.
    נסי בבקשה להנבהיר היכן נתקלת בבעיה. תעברי על הקישור לעומק (אני ממליץ לא להתבייש להעזר בתרגום של גוגל כשצריך) ותנסה לבצע את הדבירם בפרוייקט חדש ולא בפרויקט שלך שכב בטח מורכב וכלל עוד דברים.

    אם את יכולה להצביע על נקודות מסויימות שהן נתקלת בבעיה אנא פרטי ואפם תוכלי לצרף את הפרויטק בו ניסית לבצע את הדברים, אז יהיה יותר קל לעוב ולדון במה שניסית לבצע.


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]

    יום שני 26 ינואר 2015 17:30
    מנחה דיון
  • אני לא חושב שאת צריכה בניית שאילתות דינמית, כי לפי מה שתיארת אז כל הגמישות הנדרשת היא השמטת מסנן הידוע בזמן כתיבת הקוד.

    לדעתי את צריכה לכתוב קוד בסגנון כזה:

    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')
             


    מה שנותן את מה שרצית.


    • נערך על-ידי לומדים יום שלישי 27 ינואר 2015 09:46
    • הוצע כתשובה על-ידי לומדים יום שלישי 27 ינואר 2015 09:47
    • סומן כתשובה על-ידי חני זהב יום חמישי 29 ינואר 2015 07:50
    יום שלישי 27 ינואר 2015 09:45
  • תודה רבה רבה!

    עזרת לי מאד....


    חני זהב

    יום שלישי 27 ינואר 2015 10:39
  • אנא סמני את התשובה/תשובות שעזרו לך.

    תודה.


    מיקרוסופט מציעה שירות זה ללא תשלום, למטרת סיוע למשתמשים והעשרת הידע הקשור בטכנולוגיות ובמוצרים של מיקרוסופט. תוכן זה מתפרסם כפי שהוא והוא אינו מעיד על כל אחריות מצד מיקרוסופט.

    יום שלישי 27 ינואר 2015 12:26