[C#] Dynamisch wo Bedingung in LINQ


Answers

Sehen Sie sich den vollständigen Blogbeitrag an: Dynamische Abfrage mit Linq

Sie haben zwei Möglichkeiten:

Dynamische LINQ-Bibliothek

string condition = string.Empty;
if (!string.IsNullOrEmpty(txtName.Text))
    condition = string.Format("Name.StartsWith(\"{0}\")", txtName.Text);

EmployeeDataContext edb = new EmployeeDataContext();
if(condition != string.empty)
{
  var emp = edb.Employees.Where(condition);
 ///do the task you wnat
}
else
{
 //do the task you want 
}

Prädikat-Builder

Der Prädikatgenerator funktioniert ähnlich wie die dynamische LINQ-Bibliothek, ist aber typsicher:

var predicate = PredicateBuilder.True<Employee>();

if(!string.IsNullOrEmpty(txtAddress.Text))
    predicate = predicate.And(e1 => e1.Address.Contains(txtAddress.Text));

EmployeeDataContext edb= new EmployeeDataContext();
var emp = edb.Employees.Where(predicate);

Unterschied zwischen der obigen Bibliothek:

  • PredicateBuilder ermöglicht das Erstellen von typsicheren dynamischen Abfragen .
  • Die dynamische LINQ-Bibliothek ermöglicht das Erstellen von Abfragen mit dynamischen Where- und OrderBy-Klauseln, die mithilfe von Strings angegeben werden .
Question

Ich habe ein Szenario, wo ich eine dynamische Bedingung in LINQ verwenden muss.

Ich möchte so etwas:

public void test(bool flag)
{
   from e in employee
   where e.Field<string>("EmployeeName") == "Jhom"
   If (flag == true)
   {
       e.Field<string>("EmployeeDepartment") == "IT"
   }
   select e.Field<string>("EmployeeID")
}

Ich weiß, dass wir das "Wenn" nicht in der Mitte der Linq-Abfrage verwenden können, aber was ist die Lösung dafür?

Bitte helfen Sie ...




from e in employee    
where e.Field<string>("EmployeeName") == "Jhom" &&
(!flag || e.Field<string>("EmployeeDepartment") == "IT")
select e.Field<string>("EmployeeID")