Я использую DbLinq, который должен быть эквивалентом Linq2SQL для этого вопроса. Мне нужно создать запрос 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'
И в отладчике я вижу, что значение phonenumber находится в представлении результатов. Проблема в том, что я не могу понять, как получить значение номера телефона из объекта queryResult? Тип queryResult:
QueryProvider<DynamicClass1>
Edit:
Я нашел способ сделать это, но он кажется очень грубым.
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));
Может, кто-нибудь знает более чистый способ?