2010-11-25 2 views
3

私はLINQ2SQLを使用しています。しかし、C#の変数型文字列の値によっては、クエリで「Order By」を使用するか、「order by」を使用する必要があります。LINQ:変数がstring.emptyまたはnullでない場合にのみ、linqでORDER BYを動的に使用する方法

C#文字列がnullでないか、空であれば、文字列変数の内容に基づいて「並べ替える」必要があります。 C#文字列が空またはnullの場合、私は注文を含めません。

この種のクエリを記述することはできますか?

+0

はあなたを行います*空の/空のアイテムを除外するか、またはそれらを上または下にソートしたいですか? – strager

+0

文字列には何が含まれていますか?注文したいメンバーの名前ですか?または、他の何か? – KristoferA

答えて

2

VVSの答えでは好きですが、あなたは、あなたの代わりに、この拡張メソッドを使用することをお勧めします注文するためのカラム名に渡したい場合は、内蔵のOrderByメソッド:

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

優れた拡張方法!ありがとう...私は今私のツールを入れています:-) – Martin

2

は、2つのステップでそれを実行します。

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

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

私はOP質問、nullの場合はクエリの任意の変数、次に注文しないと思います。 –

+0

@Serkan: "C#の文字列型の変数の値に依存します"というのは、順序が単一の変数に依存するかのように聞こえます。 – VVS

+0

ええ、はい、あなたは、私は、ごめんなさいと思います。私は間違った答えを書いた:) –

0

しているC#のテストリストの内容、およびそれがnullが含まれていない場合にのみ、オーダーを行います。

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....); 
} 
関連する問題