LINQ查询和上下文

soo*_*ise 3 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)
{
...
}
Run Code Online (Sandbox Code Playgroud)

所以基本上发生的是变量"linq"根据"参数"的值而不同.当我尝试使用foreach循环遍历"linq"时,我得到一个关于当前上下文中linq不存在的错误.

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

Mar*_*ers 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;
}
Run Code Online (Sandbox Code Playgroud)

在您的特定示例中,您可以简化事情:

var query = from a in db.table select a;
if (parameter != 1)
{
    query = query.Where(a => a.id == 1);
}
Run Code Online (Sandbox Code Playgroud)

  • +1,但基于OP的样本,我认为它应该是`if(参数!= 1)`(对于第二个代码示例) (2认同)