您的查询目前使用了select new { }
来分配一个匿名类型,这要求您必须使用var
。如果您想分配已知的类型,请将其添加到select
语句中:
IEnumerable<SomeType> query =
from RESTAURANT in db.RESTAURANTs
where RESTAURANT.REST_ID == RestID
select new SomeType { Name = RESTAURANT.name } ;
public class SomeType
{
public string Name { get; set; }
}
将鼠标悬停在var
上,编译器会告诉你它代替的类型。
如果您想显式地使用该类型,您需要插入它而不是var
。但编译器不会因此而改变任何内容。
var query = (from RESTAURANT in db.RESTAURANTs
where RESTAURANT.REST_ID == RestID
select new { name = RESTAURANT.name});
定义了一个查询。当程序运行并处理此行时,query
变量引用一个查询实例。数据库尚未被调用。
如果您像这样在语句末尾添加(例如).ToList()
:
var query = (from RESTAURANT in db.RESTAURANTs
where RESTAURANT.REST_ID == RestID
select new { name = RESTAURANT.name}).ToList();
然后query
将包含从数据库中获取的项目列表。但在这种情况下,列表中项目的类型仍然是匿名类型,因此您仍然无法将var
更改为命名类型。如果您想要这样做,那么您需要让查询返回已知的命名类型。就像这样:
List<string> query = (from RESTAURANT in db.RESTAURANTs
where RESTAURANT.REST_ID == RestID
select RESTAURANT.name).ToList();
或者像这样:
public class Restaurant
{
public string Name {get; set;}
}
List<Restaurant> query = (from RESTAURANT in db.RESTAURANTs
where RESTAURANT.REST_ID == RestID
select new Restaurant() { Name = name }).ToList();
不需要单独声明query
,
使用?:operator var query = <condition> ? <1st Linq query> : <2nd Linq query>
代替if-else
你可以这样做:
var query = string.IsNullOrEmpty(dealer_code) ?
(from RESTAURANT in db.RESTAURANTs
where RESTAURANT.REST_ID == RestID
select new { name = RESTAURANT.name}):
(from u in db.RESTAURANTs
where u.dealer_code == dealer_code
select new { name = u.name});
var
,因为您正在投影到匿名类型。IEnumerable <object>
将无法给您想要的结果。或者,为结果创建一个类并使用IEnumerable <YourClass>
。 - haim770query
分配给什么。 - chaintng