我正在撰写的一些代码存在轻微问题
if(parameter == 1)
{
var linq = from a in db.table select a;
}
else
{
var linq = from a in db.table where a.id = 1 select a;
}
foreach(var b in linq)
{
...
}
所以基本上发生的是变量“linq”根据“参数”的值而不同。当我尝试使用foreach循环遍历“linq”时,我得到一个关于当前上下文中linq不存在的错误。
解决此类问题的最佳方法是什么?
答案 0 :(得分:9)
您尝试使用它时,您尝试的内容不起作用,因为变量linq
已经超出范围。您需要将声明移动到外部范围。
首先以一般方式回答您的问题:如果您需要在分配变量之前声明变量,则不能使用var
。您需要明确声明类型:
IQueryable<Something> linq;
if(parameter == 1)
{
linq = from a in db.table select a;
}
else
{
linq = from a in db.table where a.id == 1 select a;
}
在您的特定示例中,您可以简化一些事情:
var query = from a in db.table select a;
if (parameter != 1)
{
query = query.Where(a => a.id == 1);
}
答案 1 :(得分:0)
我不知道如果这是最好的方式,但假设你正在返回同一张桌子。
var linq = from a in db.table where a.id = 1 select a;
if(parameter == 1)
{
linq = from a in db.table select a;
}
//foreach.
你可以重建你的linq查询而不是付出很大的代价,因为你还没有真正执行它。