IQueryable для списка
я используюSystem.Linq.Dynamic чтобы позволить мне динамически выбирать список полей из запроса, как это:
finalQuery = query.Select(string.Format("new({0})", string.Join(",", selectors)));
кудаselectors
это простоList<string>
со всеми полями, которые я хочу. Это прекрасно работает, но эта версия метода расширенияSelect
возвращаетIQueryable
, Не этоне IQueryable<T>
, Если у меня естьIQueryable<T>
Я могу просто сделать.ToList()
преобразовать его в список и заставить запрос фактически выполняться в базе данных, но с неуниверсальнымIQueryable
этот метод не существует.
Это потому чтоToList
наследуется отIEnumerable<T>
которыйIQueryable<T>
наследует иIQueryable
Очевидно, нет.
Итак, какой самый эффективный способ получитьIQueryable
выполнить запрос и вернуть мне список? Я могу сделать это:
List<object> rtn = new List<object>();
foreach (var o in finalQuery)
{
rtn.Add(o);
}
Но похоже, что их должно быть проще.
Изменить: в ответ на предложения, я попробовал оба:
finalQuery.Cast<object>().ToList();
а также:
finalQuery.Cast<dynamic>().ToList();
Которые оба даютNotSupportedExceptions
с сообщением:
Unable to cast the type 'DynamicClass1' to type 'System.Object'. LINQ to Entities
only supports casting EDM primitive or enumeration types.