набор результатов с использованием двух разных представлений (из оператора if) - PullRequest
0 голосов
/ 11 июня 2010

У меня есть немного кода, который работает с результирующим набором, называемым «результат» (оригинал, который я знаю), но в зависимости от входящей переменной я хотел бы запустить конкретный запрос в зависимости.У меня есть ниже в выражении if, но это только делает набор записей "result" получает эти неприятные красные линии, и это не работает.Я уверен, что это легко решить.

 if (area == "dashboard")
     {
         IQueryable<ViewGetNavigationMainItem> result = (from m in 
             _entities.ViewGetNavigationMainItems
             where m.area.Trim() == area.Trim()
             where m.state == "Online"
             where m.parentID == parentID
             orderby m.sequence ascending
             select m);            
     }
 else
     {
         //Get the Content Items
         IQueryable<ViewGetNavigationContentItem> result = (from m in 
             _entities.ViewGetNavigationContentItems
             where m.navID == navID
             where m.parentID == parentID
             orderby m.contentOrder ascending
             select m);
     }
maxRecords = result.Count();

 foreach (var item in result)
 {
     //do something
 }

Ответы [ 2 ]

1 голос
/ 11 июня 2010

в вашем коде, «результат» не находится в области видимости при проверке счетчика, как он объявлен в «if» и «else»

вам нужно переместить объявление результата выше if и объявить его как нечто такое, как оба результата, например IEnumerable.

если все, что вы хотите сделать, это считать их, то есть ...

Если вы хотите сделать больше, подумайте о создании модели, в которую вы можете выбрать оба результата, например,

class ResultModel{
 int Id{get;set;}
 string Display{get;set;}
}
1 голос
/ 11 июня 2010

Примечание: вы можете использовать && вместо нескольких where.

Сначала определите result перед if как IQueryable для базового класса или интерфейса двух типов результатов (в C # 4.0) или как Enumerable. Вы можете создать такой базовый класс. Допустим, что единственный общий базовый класс для ViewGetNavigationMainItem и ViewGetNavigationContentItem - это Object:

 IQueryable<object> result;

 if (area == "dashboard")
                        {
                            result = (from m in _entities.ViewGetNavigationMainItems
                                      where m.area.Trim() == area.Trim()
                                      && m.state == "Online"
                                      && m.parentID == parentID
                                      orderby m.sequence ascending
                                      select m);  
                        }
                        else
                        {
                            //Get the Content Items
                            result = (from m in _entities.ViewGetNavigationContentItems
                                      where m.navID == navID
                                      && m.parentID == parentID
                                      orderby m.contentOrder ascending
                                      select m);
                        }

В foreach вместо var используется базовый класс (или общий интерфейс) для ViewGetNavigationMainItem и ViewGetNavigationContentItem. Если у вас нет более определенного базового класса, чем Object, используйте object.

foreach (object item in result)
                        { etc etc etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...