Mit Entity Framework C# und diese Abfrage haben, muss ich den Teil, wo es heißt:Entity Framework Gebäude Where-Klausel on the fly mit Expression
where x.Login_Status == "Submitted"
dynamisch. Es gibt verschiedene Fälle, in denen es "Submitted" oder null oder etwas anderes sein könnte und anstatt mehrere if-Anweisungen mit verschiedenen Abfragen darin zu schreiben, möchte ich ein Prädikat in einer where-Klausel haben.
status = (from x in ctx.table
where x.Login_Status == "Submitted"
orderby x.SUB_DATE descending
select new Model_Table()
{
Id = x.ID,
Name = x.NAME,
Code = x.Code,
DateSubmitted = x.SUB_DATE
}).ToList<Model_Table>();
Ist das möglich?
Lösung:
Innerhalb der if-Anweisung, wenn mehrere Parameter verwenden diese
where_expression = x => x.Login_Status == "Submitted" || x.Login_Status == null;
Dies ist die komplette Code festgestellt, die für mich gearbeitet, etwas eckigen Klammern ersetzen Sie den Code anpassen:
Expression<Func<[Replace with your Entity], bool>> where_submitted = x => x.Login_Status == "Submitted";
// Check if all selected
if (CheckBox_Show_All_Submitted.Checked)
{
where_submitted = x => x.Login_Status == "Submitted" || x.Login_Status == null;
}
status =
ctx.[Replace with your Entity Table]
.Where(where_submitted)
.OrderByDescending(x => x.SUB_DATE)
.Select(x => new Model_Table
{
Id = x.ID,
Name = x.NAME,
Code = x.Code,
DateSubmitted = x.SUB_DATE
}).ToList<Model_Table>();
Sie eine bitweise ENUM nutzen könnten, und verwenden Sie [Enum.HasFlag ] (https://msdn.microsoft.com/en-us/library/system.enum.hasflag%28v=vs.110%29.aspx) (das berücksichtigt den Null-Fall nicht wirklich). –
meine Antwort auf eine ähnliche Frage Siehe: http://stackoverflow.com/a/34098534/1677829 – Lunyx
Sie einen Ausdruck benötigen, kein Prädikat. –