私はこの質問のLinq2SQLに相当するDbLinqを使用しています。私は実行時に返すカラムを指定するLinq2SQLクエリを生成する必要があります。私は動的Linq拡張メソッドを使用してそれを達成することができますが、私は結果を抽出する方法を解決することはできません。ダイナミッククラスに含まれる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'
をデバッガで私がPHONENUMBER値が結果ビューにそこに座っていることがわかります。問題は、私は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));
おそらく誰かがよりクリーンな方法を知っていますか?
問題は、動的LINQの選択の拡張メソッドをIQueryableを対象としませのIQueryableオブジェクトを返しますがあります。その結果、便利なToListメソッドのどれも利用できません。私は最終的にそれらのメソッドはちょうどIEnumberatorを使用している必要がありますと思うが、とにかくボンネット。 –
sipwiz