Создание запроса LINQ во время выполнения для GroupBy в EntityFramework (с наследованием) - PullRequest
2 голосов
/ 11 января 2010

Это сценарий. У меня есть следующие три класса, они определены в Entity Framework, я определяю их здесь только для примера:

public class Foo
{
  public string Color { get; set; }
}

public class Bar : Foo
{
  public string Height { get; set; }
}

public class Pipe : Foo
{
  public string Width { get; set; }
}

Итак, у меня есть много Foo, это мой базовый класс, я хочу иметь возможность указать свойство и выполнить этот запрос:

   from e in Context.Foos
   group e.Color by e.Color into result
   select new
   {
 Value      = result.Key,
 ValueCount = result.Count()
   }

Это должно закончиться:

Синий 2 Черный 4 Желтый 2

Это работает, однако я хочу указать это во время выполнения, когда имя свойства «Цвет» передается клиентом. Кроме того, я хочу искать производные объекты тоже. Если я попытаюсь сделать

   group e.Height by e.Height into result

Это не сработает, потому что нет высоты в Foo, только в баре. Но дело в том, что я ТОЛЬКО хочу вернуть столбцы, это также должно быть указано во время выполнения. Это главная проблема, с которой я столкнулся. Я не могу сделать Foos.OfType<Bar>.GroupBy(some dynamic stuff), потому что я не знаю тип для фильтрации во время выполнения.

Был бы очень признателен за помощь в этом вопросе.

EDIT

По сути, я пытаюсь сделать следующее: System.LINQ.Dynamic: Выбрать ("new (...)") в список (или любую другую перечисляемую коллекцию ) но в конце вернуть Count вместо Sum.

1 Ответ

1 голос
/ 11 января 2010

В этот ответ , func используется для создания динамического Where.

private List<T> GetResults<T>(IQueryable<T> source, 
   Expression<Func<T, bool>> queryFunction)
{
   return source.Where(queryFunction).ToList<T>();
}

Вы должны быть в состоянии сделать что-то подобное с GroupBy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...