var query = (from RESTAURANT in db.RESTAURANTs
where RESTAURANT.REST_ID == RestID
select new { name = RESTAURANT.name});
如何投射query
代替var
?
添加更多信息,我想使以下内容成为可能。有可能吗?
答案 0 :(得分:6)
您的查询当前使用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; }
}
答案 1 :(得分:1)
鼠标悬停在var
上,您的编译器会告诉您它替换它的类型。
如果您想明确使用该类型,则需要插入而不是var
。但它不会改变编译器的任何内容。
答案 2 :(得分:1)
此:
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();
答案 3 :(得分:0)
无需单独声明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});