4

LINQDynamicLibraryで少し実験を始めました。一連のLINQステートメントをいくつかまたは1つの動的LINQクエリに置き換えようとしています。私の既存の静的クエリは次のとおりです。

private List<TicketChartData> GenerateImpl(IList<ServiceItem> myList)
{
    var output = from ticket in myList
             group ticket by ticket.Region into grouped
             orderby grouped.Count() descending
             select new TicketChartData(grouped.Key, grouped.Count(), grouped.ToList());
    return output.ToList();
}

ご覧のとおり、私の作業単位はですServiceItem。これはすべて正常に機能し、でグループ化された結果セットを取得しRegionます。DynamicLibraryを使用して、有効な動的フィールドでグループ化できるようにすることを試みています(検証は個別に処理します)。そこで、DynamicLibraryを使用して同じクエリを作成しようとしましたが、あまり成功しませんでした。もちろんコンパイルされない新しいメソッドは次のとおりです。

private List<TicketChartData> GenerateImpl(IList<ServiceItem> myList, string field)
{
    IQueryable<ServiceItem> queryableList = myList.AsQueryable<ServiceItem>();
    IQueryable groupedList = queryableList.GroupBy(field,"it").
                            OrderBy("Key descending").
                            Select("new (Key as Key)"); // Not what i need
    return output.ToList();
}

Countグループ化からもを抽出することもできませんでしたList。どうすればよいですか?私は解決策を探すのにかなりの時間を費やしました。可能であれば、Reflectionの使用を避けたいと思います。私は次のリンクでこの前にいくつかのポインタを持っていますが、それは私の実際の問題を助けません。助けてくれてありがとう。

System.LINQ.Dynamic:Select( "new(...)")into List <T>(またはその他の列挙可能な<T>のコレクション)

4

2 に答える 2

2

カウントの場合、次のように記述できます。

private List GenerateImpl(IList myList, string field)
{
    IQueryable queryableList = myList.AsQueryable();
    IQueryable groupedList = queryableList.GroupBy(field,"it").
                            OrderBy("Key descending").
                            Select("new (Key as Key, Count() as Count)");

    // Note: IQueryable doesn't have ToList() implementation - only IEnumerable 
    return output.ToList(); // will not work
}

リストの場合-可能性として、DynamicLibraryにカスタム実装を追加する必要があります...ここでContains()メソッドに対してどのように行われたかを確認してください

于 2011-03-09T23:06:22.693 に答える
0

解決策は、私の製品AdaptiveLINQ.QueryByCubeが提供する LINQ 拡張メソッドを使用することです。

免責事項: 私は AdaptiveLINQ の開発者です

于 2014-10-06T18:41:57.360 に答える