2015-07-28 5 views
2

У меня есть 2 представления SQL Server с теми же столбцами. У меня есть 2 запроса linq с Entity Framework точно так же; один применяется к View1, другой - к View2. Я хочу сгруппировать запрос 2 одним звонком.Аналогичные запросы группы 2 Entity Framework/Linq in 1

switch (day) { 
    case day == MONDAY: 
     List<int> results = (from day in **container.View1** 
          join model in container.OtherTable ... 
          where ... 
          ... 
          select id).ToList(); 
     break; 
    case day == FRIDAY: 
     List<int> results = (from day in **container.View2** 
          join model in container.OtherTable ... 
          where ... 
          ... 
          select id).ToList(); 
     break; 
} 

Я хотел бы что-то вроде

ObjectSet<EntityObject> cont= null; 

switch (day) { 
    case day == MONDAY: 
     cont = container.View1; 
     break; 
    case day == FRIDAY: 
     cont = container.View2; 
     break; 
} 

List<int> results = (from day in **cont** 
        join model in container.OtherTable ... 
        where ... 
        ... 
        select id).ToList(); 

для оптимизации кода, но я не знаю, как группировать этот код, как ...

+0

Вы спрашиваете, как запрашивать данные из обеих таблиц в одно и то же время, с результатами обеих таблиц, конкатенированных или вы пытаетесь запросить только одну (динамически выбранную) таблицу? –

+0

Второй пункт :); Я пытаюсь запросить только один выбранный динамически – user3656665

ответ

2

У всех разные взгляды, которые вы хотите чтобы выбрать из осуществить тот же интерфейс и сделать что-то вроде:

public class Something { 
    public List<int> GetSomething(Day day) 
    { 
     var dbc = new Context(); 

     switch (day) 
     { 
      case MONDAY: return GetResult(dbc.table1, dbc); 
      case FRIDAY: return GetResult(dbc.table2, dbc); 
     } 
    } 

    public List<int> GetResult<T>(DbSet<T> table, Context context) where T : class, MyInterface 
    { 
     List<int> results = (from day in table 
        join model in context.OtherTable on day.Id equals model.dayId 
        select day.Id).ToList(); 
     return results; 
    } 
} 

public interface MyInterface 
{ 
     int Id { get; set; } 
} 

Edi t: Что касается вашего комментария, создайте интерфейс, подобный приведенному выше, и ваши объекты реализуют его.

+0

Спасибо за ответ. Просто проблема с решением. Представления, созданные EF4, содержат некоторый атрибут, такой как 'public int id;' Мне нужно, чтобы вы предлагали эти представления реализовать _MyInterface_, и для этого интерфейса нужен тот же атрибут 'public int id;'. Но я не знаю, как правильно реализовать интерфейс, чтобы рассматривался 'select id'in linq. – user3656665

+0

Я обновил свой ответ с кодом для требуемого интерфейса. – randoms