我有一些代码可以使用名为“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
}
答案 0 :(得分:1)
注意:您可以使用&&
代替多个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
答案 1 :(得分:1)
在您的代码中,当您检查计数时,“结果”不在范围内,因为它在“if”和“else”中声明
你需要将结果声明移到if之上,并将结果声明为结果,例如IEnumerable。
如果你想做的只是计算它们......
如果你想做更多的事情,可以考虑创建一个模型,你可以选择两个结果,例如
class ResultModel{
int Id{get;set;}
string Display{get;set;}
}