如何从Linq中转换对象

6
var query = (from RESTAURANT in db.RESTAURANTs
             where RESTAURANT.REST_ID == RestID
             select new { name = RESTAURANT.name});

如何将var转换为query

谢谢。

添加更多信息,我想实现以下功能。这可能吗?

enter image description here


1
选择 RESTAURANT.name - Backs
1
在这种情况下,您必须使用var,因为您正在投影到匿名类型。 IEnumerable <object>将无法给您想要的结果。或者,为结果创建一个类并使用IEnumerable <YourClass> - haim770
你不能这样做,因为你正在创建一个匿名类型。 - Yuval Itzchakov
我添加了更多关于我的期望的信息。 - chaintng
@theB 这就是我问的。我应该把 query 分配给什么。 - chaintng
显示剩余3条评论
4个回答

7

您的查询目前使用了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; }
}

我会将“具体类型”更改为“已知类型”。生成的匿名类型仍然是具体类型。 - haim770

1

将鼠标悬停在var上,编译器会告诉你它代替的类型。

如果您想显式地使用该类型,您需要插入它而不是var。但编译器不会因此而改变任何内容。


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();

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});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接