この質問では、Linq2SQL に相当する DbLinq を使用しています。実行時に返す列を指定する Linq2SQL クエリを生成する必要があります。Dynamic Linq 拡張メソッドを使用してそれを達成できますが、結果を抽出する方法がわかりません。
string someProperty = "phonenumber";
string id = "1234";
Table<MyClass> table = context.GetTable<MyClass>();
var queryResult = (from item in table where item.Id == id select item).Select("new (" + someProperty + ")");
Linq 式は、次の適切な SQL を生成します。
select phonenumber from mytable where id = '1234'
デバッガーでは、電話番号の値が結果ビューに表示されていることがわかります。問題は、queryResult オブジェクトから phonenumber 値を取得する方法がわからないことです。queryResult のタイプは次のとおりです。
QueryProvider<DynamicClass1>
編集:それを行う方法を発見しましたが、それは非常に粗雑に思えます。
IEnumerator result = (from item in table where item.Id == id select item).Select("new (" + someProperty + ")").GetEnumerator();
result.MoveNext();
var resultObj = result.Current;
PropertyInfo resultProperty = resultObj.GetType().GetProperty(someProperty);
Console.WriteLine(resultProperty.GetValue(resultObj, null));
おそらく誰かがよりクリーンな方法を知っていますか?