Я использую DbLinq, который должен быть эквивалентом Linq2SQL для этого вопроса. Мне нужно создать запрос Linq2SQL, где я укажу столбцы, которые я хочу вернуть во время выполнения. Я могу добиться этого, используя методы расширения Dynamic 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 сидит там в представлении результатов. Проблема в том, что я не могу понять, как получить значение 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));
Возможно, кто-то знает более чистый способ?
Проблема есть динамический Linq Выберите метод расширения возвращает IQueryable объект, а не объект IQueryable. В результате этого нет доступных методов ToList и т. Д. Хотя я предполагаю, что в конечном итоге эти методы должны просто использовать IEnumberator в капоте. –
sipwiz