Ich muss zur Laufzeit eine where-Klausel erstellen, aber ich muss ein OR mit der where-Klausel erstellen. Ist das möglich .. Lass mich erklären ..
Hier ist mein Code ..., im Grunde ist "Filter" eine Aufzählung Bitwise, Sohn, daher könnte Filter gleich mehr als 1 der folgenden sein. Daher muss ich die where-Klausel aufbauen ...
Wenn ich das Wheres separat ausführe, als ich mir vorstelle, wenn ich zuerst das Ungetestete mache, und es 0 Datensätze zurückgibt, bedeutet dies, dass ich kein Where auf dem Tested ausführen kann, weil es jetzt 0 Datensätze sind.
Ich werde unten einen Pseudo-Code einfügen :-)
string myWhere = "";
if ((filter & Filters.Tested) == Filters.Tested)
{
if (myWhere != "" ) myWhere =myWhere + "||";
myWhere = myWhere " Status == "Tested";
}
if ((filter & Filters.Untested) == Filters.Untested)
{
if (myWhere != "" ) myWhere =myWhere + "||";
myWhere = myWhere " Status == "Untested";
}
if ((filter & Filters.Failed) == Filters.Failed)
{
if (myWhere != "" ) myWhere =myWhere + "||";
myWhere = myWhere " Status == "Failed";
}
// dataApplications = a List of items that include Tested,Failed and Untested.
// dataApplciation.Where ( myWhere) --- Confused here!
Ist das möglich..
Ich möchte nicht viele "IFs" einschließen, da es viele Cobinationen gibt, dh keinen Filter, Filter = Nur getestet, Filter = Nicht getestet und Getestet ... und vieles mehr
Jede Idee wirklich geschätzt
Vielen Dank
var statusTexts = new List<string>(); // Add desired status texts
dataApplication.Where(item =>
statusTexts.Any(status => item.Status == status))
Wenn Sie dies haben:
IEnumerable<MyType> res = from p in myquery select p;
Sie können eine definieren
var conditions = new List<Func<MyType, bool>>();
conditions.Add(p => p.PropertyOne == 1);
conditions.Add(p => p.PropertyTwo == 2);
res = res.Where(p => conditions.Any(q => q(p)));
Und jetzt der Trick, Listen von Funktionen von anonymen Objekten zu erstellen (und Sie können ihn einfach ändern, um den Typ anonymer Objekte zu "extrahieren").
static List<Func<T, bool>> MakeList<T>(IEnumerable<T> elements)
{
return new List<Func<T, bool>>();
}
Sie rufen es auf, indem Sie das Ergebnis einer LINQ-Abfrage übergeben. Damit
var res = from p in elements select new { Id = p.Id, Val = p.Value };
var conditions = MakeList(res);