1

我正在这样做:

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。

4

7 回答 7

4

偷偷摸摸的方法是做到这一点:

this.myQuery = ...

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

在此处输入图像描述

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

在此处输入图像描述

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

于 2013-11-08T22:31:09.763 回答
1

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

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

于 2013-11-08T22:31:36.050 回答
1

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

或者,如果出于某种原因你不想那样做,你可以使用一个dynamic类型,但我不建议这样做。

最好的解决方案是让编译器使用var关键字推断类型,然后将该类型显式用作类成员(您所指的“全局变量”)。

于 2013-11-08T22:38:11.780 回答
0

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

private IEnumerable<TypeOfObjectInYourCollection> myQuery;
于 2013-11-08T22:29:24.300 回答
0

使用IQueryable<TableEntity>,在哪里TableEntity是你的对象的类型Table DbSet

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

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

于 2013-11-08T22:29:26.347 回答
0

类型将是IQueryabletype 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();
}
于 2013-11-08T22:32:30.300 回答
0

尝试EnumerableRowCollection

 private EnumerableRowCollection query
于 2013-11-08T22:37:58.840 回答