C# LINQ查询和上下文

C# LINQ查询和上下文,c#,linq,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”是不同的,取决于“parameter”的值。当我尝试用foreach循环遍历“linq”时,我得到了一个关于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”是不同的,取决于“parameter”的值。当我尝试用foreach循环遍历“linq”时,我得到了一个关于linq如何在当前上下文中不存在的错误


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

您尝试的方法无效,因为变量
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 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查询,而不必支付太多的罚款,因为你还没有实际执行它。

+1但是基于OP的示例,我认为它应该是
,如果(参数!=1)
(对于第二个代码示例)哦,对了,你可以查询linq结果(这是linq的一个非常重要的功能,我刚刚开始欣赏)。这非常有用,谢谢!@Ahmad Magged:+1谢谢。发现得好!@Soo:我正在查询这个查询,它给出了一个新的查询。在你请求之前没有结果,例如通过编写
foreach(查询中的var result)
@SLaks:您确定吗?
db.table
可能具有类型
table
,我认为这会导致分配进一步失败,并出现类型错误(
无法从IQueryable转换为table
)。
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.