结果集使用两个不同的视图(来自if语句)

时间:2010-06-11 11:01:52

标签: c# asp.net-mvc model-view-controller asp.net-mvc-2

我有一些代码可以使用名为“result”的结果集(原件我知道),但是根据传入的变量,我想根据具体查询触发。我在if语句中有以下内容,但只是让“结果”记录集得到那些讨厌的红线而且它不起作用。我相信这很容易解决。

 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 个答案:

答案 0 :(得分:1)

注意:您可以使用&&代替多个where

首先,在result之前将if定义为两类结果的基类或接口的IQueryable(在C#4.0中)或Enumerable。您可以创建这样的基类。假设ViewGetNavigationMainItemViewGetNavigationContentItem的唯一公共基类是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使用ViewGetNavigationMainItemViewGetNavigationContentItem的基类(或通用接口)。如果您没有比Object更具体的基类,请使用object

foreach (object item in result)
                        { etc etc etc

答案 1 :(得分:1)

在您的代码中,当您检查计数时,“结果”不在范围内,因为它在“if”和“else”中声明

你需要将结果声明移到if之上,并将结果声明为结果,例如IEnumerable。

如果你想做的只是计算它们......

如果你想做更多的事情,可以考虑创建一个模型,你可以选择两个结果,例如

class ResultModel{
 int Id{get;set;}
 string Display{get;set;}
}