3

次のような文字列リストがあるとします

list<string> cols = {"id", "name", "position"}.

このリストは動的に生成され、このリストの各リストはデータベース テーブルの列名を表します。

私がやりたいのは、これらの列のみを返す linq クエリを動的に作成することです。

var q = from e in employ
        select new {
          id = id,
          name = name,
          position = position
};

入力列リストに基づいてそのようなクエリを生成するにはどうすればよいですか?

4

2 に答える 2

0

式ツリーを使用して動的な Linq クエリを作成できます。例を次に示します: http://msdn.microsoft.com/en-us/library/bb882637.aspx

于 2012-12-10T07:58:44.317 に答える
0

チョコボボーイが言ったように、System.Linq.Dynamic助かります。残念ながら、これは .NET フレームワークには含まれていませんが、Scott Guthrie のブログからダウンロードできます。あなたの場合、呼び出す必要がありますSelect(string selector)(ハードコードされた列リストまたはリストから取得された列リストを使用)。オプションで、私の例には動的Where節 ( Where("salary >= 50"))が含まれています。

List<string> cols = new List<string>(new [] { "id", "name", "position" });
var employ = new[] { new { id = 1, name = "A", position = "Manager", salary = 100 },
    new { id = 2, name = "B", position = "Dev", salary = 50 },
    new { id = 3, name = "C", position = "Secretary", salary = 25 }
};
string colString = "new (id as id, name as name, position as position)";
//string colString = "new ( " + (from i in cols select i + " as " + i).Aggregate((r, i) => r + ", " + i) + ")";
var q = employ.AsQueryable().Where("salary >= 50").Select(colString);
foreach (dynamic e in q)
    Console.WriteLine(string.Format("{0}, {1}, {2}", e.id, e.name, e.position));

ただし、このアプローチは、厳密に型指定された LINQ クエリの目的に何らかの形で反するため、注意して使用します。

于 2012-06-13T02:14:08.810 に答える