4

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;

    // ....
}

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

4

3 に答える 3

9

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);
于 2012-05-04T09:03:18.020 に答える
0

MicrosoftはDynamicLinqライブラリを作成しました。

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

http://msdn2.microsoft.com/en-us/vcsharp/bb894665.aspx

このライブラリを使用すると、Linqクエリを動的に指定できます

于 2012-05-04T08:58:41.050 に答える
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);

    // ....
}

次のような式を作成します。

Expression<Func<Expense, string>> group = (q) => q.Location;
于 2012-05-04T09:02:33.980 に答える