LINQ查询和上下文

时间:2010-06-08 20:03:41

标签: c# linq

我正在撰写的一些代码存在轻微问题

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不存在的错误。

解决此类问题的最佳方法是什么?

2 个答案:

答案 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查询而不是付出很大的代价,因为你还没有真正执行它。