0

次のように EF + LINQ でクエリできるテーブルがあるとします。

    var results = dbContext.MyTable.Where(q => q.Flag = true);

次に、返される列を制限したい場合は、次のようにその行に選択を追加するだけです。

    var results = dbContext.MyTable
            .Select(model => new { model.column2, model.column4, model.column9 })
            .Where(q => q.Flag == true);

私が理解する必要がある次のステップは、それらの列を動的に選択する方法です。別の言い方をすれば、コンパイル時にそれらが何であるかを知らなくても、テーブル内の列を選択できる必要があります。したがって、たとえば、次のようなことができる必要があります。

    public IEnumerable<object> GetWhateverColumnsYouWant(List<string> columns = new List<string{ "column3", "column4", "column999"})
    {
            // automagical stuff goes here.
    }

返されるレコードの値を厳密に型指定しておくことが重要です。つまり、値を文字列のリストにそのままダンプすることはできません。これは反射で達成できるものですか?それとも、ジェネリックの方がこれに適していますか? 正直なところ、どこから始めればよいかわかりません。

助けてくれてありがとう。

4

1 に答える 1

0

私はあなたがいくつかの動的linqを望んでいると思います.私はこれについての専門家ではありませんが、私はそれがこのようになると思います.

public static IEnumerable<object> GetWhateverColumnsYouWant(this IQueriable<T> query, List<string> columns = new List<string{ "column3", "column4", "column999"})
{
    return query.Select("new (" + String.Join(", ", columns) + ")");
}

こちらの scott Gu のブログhttp://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspxとこの質問システムを参照してください.LINQ.Dynamic: Select(" new (...)") を List<T> (またはその他の列挙可能な <T> のコレクション) に

おそらく、選択したい列の式ツリーを動的に構成することによってこれを行うこともできますが、これはかなり多くのコードを記述することになります。

于 2013-05-22T23:10:59.267 に答える