我想要实现的是:
switch(flag)
{
case 1:
var query=from w in db.someTable
select w;
break;
case 2:
query=from w in db.someTable
where w.id==someID
select w;
break;
case default:
break;
}
Run Code Online (Sandbox Code Playgroud)
但它无法正确编译.如果我var在第二个之前添加一个query,它会提示已声明查询.我是否必须更改变量名称?如:像query1 in case1, query2 in case2等
编辑1感谢您的帮助.实际上我的代码比我上面发布的代码复杂一点.这是完整的代码:
List<object> results=new List<object>();
switch (flag)
{
case 1:
var query = from w in db.RADIATION
where w.DATEDT.CompareTo(dateStr) == 0
&& w.LATITUDE.CompareTo(latitude) == 0
&& w.LONGITUDE.CompareTo(longitude) == 0
orderby w.TIMETM
select new { w.RADIATION, w.TIMETM };
break;
case 2:
var query = from w in db.TEMPRETURE
where w.DATEDT.CompareTo(dateStr) == 0
&& w.LATITUDE.CompareTo(latitude) == 0
&& w.LONGITUDE.CompareTo(longitude) == 0
orderby w.TIMETM
select new { w.TEMPRETURE, w.TIMETM };
foreach (var item in query)
{
var resultItem = new { TEMPRETURE = item.TEMPRETURE, TIME = item.TIMETM };
results.Add(resultItem);
}
break;
case default:
break;
}
Run Code Online (Sandbox Code Playgroud)
这两个查询用于两个不同的表.所以我不知道如何确定IQueryable中的Type T. 另外,我使用的select是匿名对象new { PropertyName = propertyValue }.无论如何,如果我坚持使用相同的名称query?
使用声明var可以缩短代码,但声明的变量仍然是静态类型的,并且该变量的范围不会更改.
如果需要在外部使用变量switch,请在switch语句之前声明它,如下所示:
IQueryable<SomeType> query = null;
switch (...) {
case 1: query = ...; break;
...
default: ...
}
Run Code Online (Sandbox Code Playgroud)
现在你可以query在外面使用了switch.
注意:在某些情况下您必须使用,var因为您为其分配的类型没有名称,但在第一种情况下,类型具有名称,因此您无需使用var.
编辑:但是,你的第二种情况需要一个var,因为你选择了一个匿名类型.在这种情况下,有几种方法可以解决这个问题:
TIMETM,TEMPERATURE和RADIATION),或IQueryable<dynamic>.这会将一些编译时检查转移到运行时,但如果你必须走这条路,那就非常方便了.| 归档时间: |
|
| 查看次数: |
2759 次 |
| 最近记录: |