2017-12-19 5 views
2

Ich habe eine Tabelle, die Mitarbeiter Datensätze wie ersten, mittleren, Nachnamen enthält. Ich habe 3 Textfelder, um all diese einzugeben. Jetzt auf .net-Seite Ich möchte eine einzelne LINQ-Abfrage zum Filtern von Daten basierend auf first name middle name and last name schreiben. Jedes dieser 3 Felder kann leer sein. Ist das eine Möglichkeit, eine einzelne generische LINQ-Abfrage zu schreiben?Wie schreibe ich eine generische LINQ-Abfrage für die Filterung von Daten basierend auf Vorname zweiter Vorname und Nachname

Antwort

0

Sie können eine Linq-Abfrage mit oder Bedingung schreiben wie unten

_context.tablename.where (p => p.firstName.contains (txtFirstName) || p.middleName.contains (txtMiddleName) || p.lastName.contains (txtLastName)). ToList();

ändern tablename mit Ihnen Datenbanktabelle in über Linq-Abfrage

4
public IList<Employee> GetEmployees(string first, string middle, string last) 
{ 
    var query = context.Employees.AsQueryable(); 
    if (!string.IsNullOrWhiteSpace(first)) 
    { 
     query = query.Where(x => x.FirstName == first); 
    } 
    if (!string.IsNullOrWhiteSpace(middle)) 
    { 
     query = query.Where(x => x.MiddleName == middle); 
    } 
    if (!string.IsNullOrWhiteSpace(last)) 
    { 
     query = query.Where(x => x.LastName == last); 
    } 

    return query.Select(x => 
        new Employee 
        { 
         FullName = string.Join(" ", new string[] { x.FirstName, x.MiddleName, x.LastName}.Where(y => !string.IsNullOrWhiteSpace(y))) 
        }) 
       .ToList(); 
} 
0

wenn Iterieren überprüfen nur, wenn die Kriterien in Gebrauchswert hat etwas

var criteria = new 
{ 
    FirstName = default(string), 
    MiddleName = default(string), 
    LastName = "Doe", 
}; 

var query = from record in Context() 
      where !string.IsNullOrEmpty(criteria.FirstName) 
        && record.FirstName == criteria.FirstName 
       || !string.IsNullOrEmpty(criteria.MiddleName) 
        && record.MiddleName == criteria.MiddleName 
       || !string.IsNullOrEmpty(criteria.LastName) 
        && record.LastName == criteria.LastName 
      select record; 
+0

Prüfung Kern für voll Beispiel https://gist.github.com/dandohotaru/d0598c7dd9599cc4e173b478d7e4cf82 Arbeits –

0

Versuchen Sie, wie das;

public List<Employee> RetrieveEmployees(string firstName, string lastName, string middleName) 
    { 
     var query = from employees in context.Employees 
      where (string.IsNullOrEmpty(firstName) || employees.FirstName == firstName) && 
        (string.IsNullOrEmpty(lastName) || employees.LastName == lastName) && 
        (string.IsNullOrEmpty(middleName) || employees.MiddleName == middleName) 
     select employees; 

     return query.ToList(); 
    } 
+0

Nicht ganz richtig: '' && geht vor '' || –

+0

Es geht nicht um Verständnis geht es um Bewertung Auftrag. In C# '&&' wird vor '||' ausgewertet, und SQL macht dasselbe: 'AND' wird vor' OR' ausgewertet. Du hast grundsätzlich C1 OR (C2 UND C3) ODER (C4 UND C5) ODER C6 geschrieben (und diese Klammern sind wirklich nur zum Verstehen da) –

+0

Nicht mehr, weil du es repariert hast, ich wollte nur erklären, warum es repariert werden musste. Ich hoffe, Sie verstehen! –

Verwandte Themen