如何声明要在C#表达式上使用的全局变量

时间:2013-11-08 22:25:43

标签: c# global-variables scope declaration

我这样做:

protected void btn_Click(object sender, EventArgs e){

var myQuery = from tab1 in Table
              where myConditions
              select tab1 ;

之后,我使用用户选择的选项进行过滤:

myQuery.Where(x => x.someField == someChoice);

工作正常。但我想用全球范围宣布“myQuery”。

我该怎么做?我试图将下面的行放在类中和方法之外,但我不知道应该使用什么类型:

private someTypeThatIdontKnow myQuery;

TIA。

7 个答案:

答案 0 :(得分:4)

执行此操作的偷偷摸摸的方法是:

this.myQuery = ...

然后将插入符号放在myQuery(这将有一个红色波浪形,表示有问题),然后按 ctrl + ,然后选择IDE提供生成字段的提议:

enter image description here

这会生成一个正确类型的字段:

enter image description here

现在只需在设置MyTable后将查询本身移动到您需要它的位置(可能是构造函数)。

答案 1 :(得分:1)

如果您将鼠标悬停在var关键字上,它会告诉您它的类型。

然后,您可以使用它来定义类的成员以保存结果。

答案 2 :(得分:1)

您可以使用var关键字获取类型,然后声明该类型的变量。

或者,如果由于某种原因你不想这样做,你可以使用dynamic类型,但我会反对。

最好的解决方案是让编译器使用var关键字推断类型,然后明确地将该类型用作类成员(就像你引用的那样“全局变量”)。

答案 3 :(得分:0)

LINQ查询返回某种IEnumerable,所以我相信它会是

private IEnumerable<TypeOfObjectInYourCollection> myQuery;

答案 4 :(得分:0)

使用IQueryable<TableEntity>,其中TableEntityTable DbSet中对象的类型。

它也可能是IEnumerable<TableEntity>,具体取决于您是针对数据库还是某些内存中集合运行查询。

您还可以通过将鼠标悬停在myQuery上来查看要使用的类型。

答案 5 :(得分:0)

该类型将是IQueryable类型的tab1

假设您最终致电ToList()来运行查询,那么您最终会得到List<tab1>。因此,您可以将全局变量声明为该类型。

我假设tab1是一个可供您列出的对象。

List<tab1> result = new List<tab1>();

protected void btn_Click(object sender, EventArgs e)
{
    var myQuery = from tab1 in Table
                  where myConditions
                  select tab1;

    myQuery.Where(x => x.someField == someChoice);

    result = myQuery.ToList();
}

答案 6 :(得分:0)

尝试EnumerableRowCollection

 private EnumerableRowCollection query