2010-11-25 6 views
3

Ich benutze LINQ2SQL und es funktioniert ziemlich gut. Abhängig vom Wert der Zeichenfolge vom Variablentyp in C# muss ich jedoch "Order By" in meiner Abfrage verwenden oder keine "Order by" verwenden.LINQ: Wie man eine ORDER BY in linq dynamisch verwendet, aber nur wenn eine Variable nicht string.empty oder null ist

Wenn die C# -Zeichenfolge nicht null oder leer ist, dann möchte ich für den Inhalt der Zeichenfolgenvariable "bestellen von". Wenn die C# -Zeichenfolge leer oder null ist, schließe ich keine Reihenfolge ein.

Ist es möglich, diese Art von Abfrage zu schreiben?

+0

Sie tun wollen * diese leeren/null-Objekte * ausschließen oder nach oben oder unten sortieren? – strager

+0

Was enthält die Zeichenfolge? Der Name des Mitglieds, nach dem Sie bestellen möchten? Oder etwas anderes? – KristoferA

Antwort

2

Machen Sie es wie in VVS Antwort, aber wenn Sie für die Bestellung in den Spaltennamen zu übergeben Sie diese Erweiterung Methode verwenden möchten, anstatt den eingebauten in OrderBy-Methode:

public static IOrderedQueryable<T> OrderBy<T>(this IQueryable<T> query, string memberName) 
{ 
    ParameterExpression[] typeParams = new ParameterExpression[] { Expression.Parameter(typeof(T), "") }; 

    System.Reflection.PropertyInfo pi = typeof(T).GetProperty(memberName); 

    return (IOrderedQueryable<T>)query.Provider.CreateQuery( 
     Expression.Call( 
      typeof(Queryable), 
      "OrderBy", 
      new Type[] { typeof(T), pi.PropertyType }, 
      query.Expression, 
      Expression.Lambda(Expression.Property(typeParams[0], pi), typeParams)) 
    ); 
} 
+0

ausgezeichnete Erweiterungsmethode! danke ... ich setze gerade meine Werkzeuge ein :-) – Martin

2

es in zwei Schritten durchführen:

var query = from .. in .. where .. select ..; 

if (!string.IsNullOrEmpty(someVariable)) 
{ 
    query = query.OrderBy((..) => ..); 
} 
+0

Ich denke, OP fragt, jede Variable in der Abfrage, wenn null, dann nicht durch bestellen. –

+0

@Serkan: "abhängig vom Wert einer Variablen vom Typ String in C#" klingt für mich so, als ob die Reihenfolge von einer einzelnen Variablen abhängt. – VVS

+0

hmm ja du bist richtig ich denke, sorry. Ich schrieb falsche Antwort dann :) –

0

Have C# der Inhalt der Liste zu testen und tun, um die Ordnung nur dann, wenn es nicht null enthält.

var myList = (from s in dataContect.Users select s).ToList(); 

bool containsNull = false; 

foreach (var item in mylist) 
{ 
    if (string.IsNullOrEmpty(item.LastName)) 
    { 
     containsNull = true; 
    } 
} 

if (!containsNull) 
{ 
    // If is not contains null, Use Order By 
    myList = myList.OrderBy(k => k....); 
} 
Verwandte Themen