Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 1
  • 64

Witam.

Zastanawiam się jak poprawić projekt. Obecnie przekazuje 2 argumenty z linii komend. Gdyby zaszła potrzeba przekazania 10 można rozszerzyć where o kolejne argumenty w kodzie programu. Jest to mało profesjonalne. W związku z tym moje pytanie, czy jestem w stanie w klauzuli WHERE przekazać warunki w sposób dynamiczny?

z góry bardzo dziękuję.

 

public void PrintPDF(Dictionary<List<string>, string> lista, params string[] argumenty)
        {

            dcDataContext dc = new dcDataContext();

            var platnosci = from p in dc.PAYMENTSs
                            //where p.POTERM >= pdniMin
                            //where p.POTERM <= pDniMax
                            where p.POTERM == (int.Parse(argumenty[0])) || (p.POTERM == int.Parse(argumenty[1]))
                            select p;
                        
    W klasie głównej:
    
    static void Main(string[] args)
        {
            
           // lista emaili wraz z załącznikami
            Dictionary<List<string>, string> listaEmail = new Dictionary<List<string>, string>();
            gPdf.PrintPDF(listaEmail, args);
            sendEmail se = new sendEmail();
            foreach (KeyValuePair<List<string>, string> pair in listaEmail)
            {
                se.sendEmailEWS(pair.Key, pair.Value);
            }
           // Console.ReadKey();
        }

 

Bogdan_Chlebowski_DCHK
  • Zapytał
  • @ Bogdan_Chlebowski_DCHK | 23.09.2016
    • 3
    • 4
    • 12
Zaloguj się aby zadać pytanie
Pokrewne

Odpowiedź (1)

  • 0

Do budowania dynamicznych zapytań Linq (nie tylko części Where) służą drzewa wyrażeń i typy w przestrzeni System.Linq.Expressions. Opis krok po kroku budowania dynamicznego Where i Order by można znaleźć w temacie dokumentacji How to: Use Expression Trees to Build Dynamic Queries (C#):

https://msdn.microsoft.com/en-us/library/mt654267.aspx

 

  • Odpowiedział
  • @ | 26.09.2016
  • TRENER ALTKOM AKADEMII
Komentarze
Dziękuję za naprowadzenie na właściwą drogę:
Zrobilem to tak:
Pobrałem Dynamic LINQ Library:
Przerobiłem Kolekcje:

var platnosci1 = dc.PLATNOSCIs
.AsQueryable()
.Where(FilterCriteria(2,7,14));
private string FilterCriteria(params int[] przedzial)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < przedzial.Length; i++)
{
sb.Append("POTERM=" + przedzial[i].ToString());
sb.Append("||");
}
return sb.ToString().TrimEnd(new char[] { '|' });
}
REWELACJA
wielkie dzięki
Skomentował : @ Bogdan_Chlebowski_DCHK ,28.09.2016
  • 3
  • 4
  • 12