bugfix> c# > 投稿
public class SortExample
{
  public int IntField {get; set;}
  public string StringField {get; set;}
  public DateTime DateField {get; set;}
}

このクラスはリストビューのソースとして設定され、以下の関数で渡されるsortExpressionパラメーターは、並べ替え順序「IntField ASC」「IntField DESC」「StringField ASC」「StringField DESC」のプロパティ名です。

public void SortExampleMethod(string sortExpression)
{
   List<SortExample> list = new  List<SortExample>();
   list.OrderBy(sortExpression);
}

これを実装する唯一の方法は、すべてのプロパティまたはLINQの何かにコンパレータを記述して、これを簡単に行うことですか?

回答 2 件
  • 必要なことを行うには、LINQ Dynamic Query Libraryを使用して string を渡すことができます  あなたの OrderBy へ 。

    例: var result = list.OrderBy("intField asc");

    ここで完全なチュートリアル

    https://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library

    別の解決策は、メソッドが Expression を受け入れるようにすることです  クラス

    public void sort(Expression<Func<TEntity, S>> orderByExpression, bool ascending)
    {
    List<SortExample> list = new  List<SortExample>();
    if(ascending)
    {
       list.OrderBy(orderByExpression);
    }
    else
       list.OrderByDescneding(orderByExpression);
    }
    
    

  • 次のようなもの:

    list.OrderBy(x => x.property);

    https://msdn.microsoft.com/en-us/library/bb534966.aspx

あなたの答え