IQueryable<T>.Include<T, объект >> (выражение<Func <T, объект >> не работает
Я пытаюсь загрузить свойства навигации с помощью метода IQueryable Include, однако, хотя выражение правильное, я не получаю никаких результатов.
вот код
protected void LoadNavigationProperty(ref IQueryable<T> query, Expression<Func<T, object>>[] navigationProperties)
{
if ((query != null) && (navigationProperties != null))
{
foreach (Expression<Func<T, object>> navigationProperty in navigationProperties)
{
query.Include<T, object>(navigationProperty);
}
}
}
Я поставил точку останова на query.Include и проверил данные:
navigationProperties[0] = { n => n.UserStatus }
navigationProperties[1] = { n => n.PrivilegeLevel }
Пройдя мимо строки включения, я снова проверил значение запросов и обнаружил, что оно не включает свойства nav
2 ответа
Решение
Include()
не меняется query
Например, он возвращает новый. Вы должны назначить его обратно query
:
protected void LoadNavigationProperty(ref IQueryable<T> query, Expression<Func<T, object>>[] navigationProperties)
{
if ((query != null) && (navigationProperties != null))
{
foreach (var navigationProperty in navigationProperties)
{
query = query.Include<T, object>(navigationProperty);
}
}
}
Марчин объясняет, почему это не сработало (.Include(
действительно изменяет запрос) однако я просто хотел дать вам альтернативный способ сделать это, чтобы вы могли использовать метод в качестве метода расширения, чтобы он мог использоваться в строке так же, как .Include(
или же .Select(
было бы.
public static IQueryable<T> LoadNavigationProperty(this IQueryable<T> query, Expression<Func<T, object>>[] navigationProperties)
{
if ((query != null) && (navigationProperties != null))
{
foreach (var navigationProperty in navigationProperties)
{
query = query.Include<T, object>(navigationProperty);
}
}
return query;
}