הרבה ערכים ב-where בc#

זה השם שלי...

משתמש רשום
היי,
אני צריכה לעשות שאילתא בC#
ויש לי בwhere בערך 20+ פריטים:rolleyes:
איך אני יכולה לחסוך את כל הבדיקה על ה20 פריטים ולעבור רק על האוביקט
מקווה שהסברתי ברור מה אני צריכה...
תודה!!!
 

זה השם שלי...

משתמש רשום
זה מה שיש לי:
אני מקבלת אוביקט (user)
ואני רוצה לשלוף נתונים מהטבלה לפי הערכים שיש לי באוביקט הזה...
אני יכולה להמשיך לכתוב עוד ועוד ערכים(האוביקט מכיל 20 ערכים פלוס זה שחלק מהערכים יכולים להגיע ריקים מהלקוח)
אבל זה לא נראה טוב...
C#:
public UsersReadDto UsersTable(UsersReadDto user)
{
    _context.USERS.Where(s => s.FirstName == user.FirstName && user.FirstName == null
    && s => s.LastName == user.LastName && user.LastName == null
    && s => s.Address == user.Address && user.Address ==null
    && s => s.ID == user.Address && user.ID ==null
    && s => s.Zone == user.Address && user.Zone ==null
    )
                        .Select(s => new
                        {
                            ID = s,
                            FirstName = s,
                            LastName = s
                        })
                        .FirstOrDefault();
}
 

dvora zin

משתמש פעיל
D I G I T A L
לפני שאת מתחילה עם השאילתה תעשי פונקציה גנרי שמקבלת את האובייקט ועוברת על הproperty שלו, ובודקת שם למי יש נתונים, ולדוג' לשמור בList את כל השדות שיש להם נתונים,
אולי כך יהיה לך יותר קל כשיהיה לך את המיפוי קודם,
 

זה השם שלי...

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

dvora zin

משתמש פעיל
D I G I T A L
סוג של פונקציה גנרית כזו:

//Get the collection property
foreach (var property in typeof(T).GetProperties())
{
if (property.Name == "Props")
{
foreach (var item in (IEnumerable)property.GetValue(type, null))
{
//כאן את בודקת את הערך ושומרת את השדה
}
}
}​
 

dvora zin

משתמש פעיל
D I G I T A L
כלומר ליצור LIST שמכיל רק את הערכים המלאים באוביקט?
כי תכלס אני בנ"א לא חייב למלא את הערכים האלה
ואע"פ כן אני כן רוצה לסנן לפי זה...
*********
אני במסך יכולה לבחור סינון ויש לי המון אפשרויות,
ואני לא חייבת למלא הכל,
וכשאני לוחצת על חיפוש- אני שולחת את האוביקט לפונקציה הנ"ל ורוצה להחזיר לפי
הנתונים שיש באובייקט- שדות מתאימים...

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

dvora zin

משתמש פעיל
D I G I T A L
ה20+ סינונים זה כל השדות שיש?
כלומר אם בחרת את כל הסינונים אמור להביא את כל הרשומות בטבלה?
 

זה השם שלי...

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

dvora zin

משתמש פעיל
D I G I T A L
לא, השאלה שלי היא אחרת, לא מה תחזירי,
אלא אם כל השדות שנמצאות בטבלה יכולות להיות מסנן?
או למשל אם יש עוד כמה שדות בטבלה שאין אפשרות לסנן על ידם?
 

dvora zin

משתמש פעיל
D I G I T A L
לא התעמקתי עד הסוף, אבל אולי זה יוכל לעזור לך:
אם לא, תנסי לחפש עוד על בנייה של linq דינאמי,
 

זה השם שלי...

משתמש רשום
לא התעמקתי עד הסוף, אבל אולי זה יוכל לעזור לך:
אם לא, תנסי לחפש עוד על בנייה של linq דינאמי,
ניסיתי-לא עזר:(
היה נראה לי הכי פשוט לעשות את זה כמו מה ששמתי למעלה...
 

dvora zin

משתמש פעיל
D I G I T A L
בגישה ישירה כמו הדוגמא שלך לא נראה לי שאפשר להוריד כי אם זה הסינון שאת צריכה אז איך תורידי סינון,
אגב, בקוד שלך למעלה משהו לא הסתדר לי כי כתבת
s.LastName == user.LastName && user.LastName == null
נראה כאילו את מחפשת שדות שהם null כי יש לך && בקישור,
נראה לי שאת צריכה להפוך את user.LastName == null ל!= null לא?
אף פעם לא עשיתי דבר כזה בדינאמי אבל זה נראה מאד מעניין ואמור לפתור בעיות כאלה,
כי את יכולה לשנות את הwhere כל פעם למה שאת רוצה, לא?
 

זה השם שלי...

משתמש רשום
יכול להיות שאני לא הבנתי איך לעשות את זה וכל הקטע עם הNULL הוא טעות...
אני לא צריכה להתייחס לערך NULL אלא-
יש לי 20 אפשרויות סינון ,
אני יכולה לבחור כמה סינונים שאני רוצה...
לדוג': אני רוצה לראות את כל המשתמשים שהמשפחה שלהם כהן,
אז מה שאני מקבלת בשרת זה אובייקט עם כל האפשרויות סינון
ורק הLASTNAME = כהן,
ואני רוצה להחזיר את כל היוזרים שהמשפחה שלהם כהן...
מקווה שזה יותר ברור:)
 

dvora zin

משתמש פעיל
D I G I T A L
יפה, אז זה מה שכתבתי לך בהתחלה,
אם את רוצה דוקא את הדרך שלמעלה אם יש לך 20 סינונים מלאים אין לך איך להוריד אותם,
מה שאת יכולה לחסוך זה מה שכתבתי לך מקודם, לבדוק מי השדות המלאים באובייקט ואז לסנן,
אלא אם כן, תביני איך עובד הנושא של לינק דינאמי (שאני בעצמי לא התנסיתי בזה בלינק, אבל כן לדוג' בסינון בSQL)
אבל לפי השם אמור להיות פתרון יותר נכון,
 

אולי מעניין אותך גם...

אשכולות דומים

תגובות
1
צפיות
370

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק ד

א לַמְנַצֵּחַ בִּנְגִינוֹת מִזְמוֹר לְדָוִד:ב בְּקָרְאִי עֲנֵנִי אֱלֹהֵי צִדְקִי בַּצָּר הִרְחַבְתָּ לִּי חָנֵּנִי וּשְׁמַע תְּפִלָּתִי:ג בְּנֵי אִישׁ עַד מֶה כְבוֹדִי לִכְלִמָּה תֶּאֱהָבוּן רִיק תְּבַקְשׁוּ כָזָב סֶלָה:ד וּדְעוּ כִּי הִפְלָה יְהוָה חָסִיד לוֹ יְהוָה יִשְׁמַע בְּקָרְאִי אֵלָיו:ה רִגְזוּ וְאַל תֶּחֱטָאוּ אִמְרוּ בִלְבַבְכֶם עַל מִשְׁכַּבְכֶם וְדֹמּוּ סֶלָה:ו זִבְחוּ זִבְחֵי צֶדֶק וּבִטְחוּ אֶל יְהוָה:ז רַבִּים אֹמְרִים מִי יַרְאֵנוּ טוֹב נְסָה עָלֵינוּ אוֹר פָּנֶיךָ יְהוָה:ח נָתַתָּה שִׂמְחָה בְלִבִּי מֵעֵת דְּגָנָם וְתִירוֹשָׁם רָבּוּ:ט בְּשָׁלוֹם יַחְדָּו אֶשְׁכְּבָה וְאִישָׁן כִּי אַתָּה יְהוָה לְבָדָד לָבֶטַח תּוֹשִׁיבֵנִי:
נקרא  23  פעמים

ספירת העומר

לוח מודעות

למעלה