2012-05-04 12 views
1

LINQを使用してクエリを実行するオブジェクトのリストがあります。私はそれらをプロパティでグループ化できるようにしたい。プロパティでLINQグループをパラメータとして使用する

var query = from item in expense 
    orderby item.ExpenseTime descending 
    group item by item.Location; 

var query = from item in expense 
    orderby item.ExpenseTime descending 
    group item by item.ExpenseType; 

var query = from item in expense 
    orderby item.ExpenseTime descending 
    group item by item.Person; 

メソッドの引数としてプロパティを指定する方法はありますか?

public static void GetExpensesBy(List<Expense> expense, Property myGroupingProperty) 
{ 
    var query = from item in expense 
       orderby item.ExpenseTime descending 
       group item by item.myGroupingProperty; 

    // .... 
} 

クエリの後には、一般的なコードがあり、グループを気にしないことに注意してください。

+0

としてこの関数を呼び出すことができますがエンティティにこのLINQのですか? –

答えて

5

あなたGetExpenseBy

以下のように
public static void GetExpensesBy<TKey>(List<Expense> expense, 
             Func<Expense, TKey> myGroupingProperty) 
{ 
    var query = (from item in expense 
       orderby item.ExpenseTime descending 
       select item).GroupBy(myGroupingProperty); 
    // .... 
} 

を変更した場合、あなたは

GetExpensesBy(expense, item => item.Location); 
GetExpensesBy(expense, item => item.Person); 
GetExpensesBy(expense, item => item.ExpenseType); 
+0

複数のGroupByを同じ式で作成できますか?例:場所別にグループ化し、同じ表現の人ですか? GetExpensesBy(経費、item => item.Location、item => item.Person)のように。 –

+1

人と場所の両方でグループ化する必要がある場合は、 'GetExpensesBy(経費、item =>新しい{item.Location、item.Person}); ' – Ramesh

+0

を使うことができます。 –

0
public static void GetExpensesBy<T>(List<Expense> expense, Expression<Func<A,T>> groupbyExpression) 
{ 
    var query = from item in expense 
       orderby item.ExpenseTime descending; 
    query.GroupBy(groupbyExpression); 

    // .... 
} 

LINQクエリのいずれかを指定し、のような式を作成することができます。

Expression<Func<Expense, string>> group = (q) => q.Location; 
+0

なぜ表現を使用したいのですか? – Ramesh

関連する問題