我这样做:
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。
答案 0 :(得分:4)
执行此操作的偷偷摸摸的方法是:
this.myQuery = ...
然后将插入符号放在myQuery
(这将有一个红色波浪形,表示有问题),然后按 ctrl + 。,然后选择IDE提供生成字段的提议:
这会生成一个正确类型的字段:
现在只需在设置MyTable
后将查询本身移动到您需要它的位置(可能是构造函数)。
答案 1 :(得分:1)
如果您将鼠标悬停在var
关键字上,它会告诉您它的类型。
然后,您可以使用它来定义类的成员以保存结果。
答案 2 :(得分:1)
您可以使用var
关键字获取类型,然后声明该类型的变量。
或者,如果由于某种原因你不想这样做,你可以使用dynamic
类型,但我会反对。
最好的解决方案是让编译器使用var
关键字推断类型,然后明确地将该类型用作类成员(就像你引用的那样“全局变量”)。
答案 3 :(得分:0)
LINQ查询返回某种IEnumerable,所以我相信它会是
private IEnumerable<TypeOfObjectInYourCollection> myQuery;
答案 4 :(得分:0)
使用IQueryable<TableEntity>
,其中TableEntity
是Table
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