Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq类型转换问题_Linq_Generic List - Fatal编程技术网

Linq类型转换问题

Linq类型转换问题,linq,generic-list,Linq,Generic List,为什么这个东西在第二行给出消息(即列表转换) 如果已将其转换为IEnumerable。将其转换为列表有什么问题 同样,如果我写下以下内容,它会起作用: IEnumerable<Order> MyQuery = from order in dataContext.GetTable<Order>() where order.ID == 1

为什么这个东西在第二行给出消息(即列表转换)

如果已将其转换为IEnumerable。将其转换为列表有什么问题

同样,如果我写下以下内容,它会起作用:

IEnumerable<Order> MyQuery = from order in dataContext.GetTable<Order>()
                                         where order.ID == 1
                                         select order;
List<Order> list = new List<Order>(MyQuery);
IEnumerable MyQuery=来自dataContext.GetTable()中的订单
其中order.ID==1
选择订单;
列表=新列表(MyQuery);

为什么??诀窍是什么?

问题不在列表结构中,而是在这一行:

select new Order() {ID = order.ID, OrderDate=order.OrderDate };
问题是您无法在查询中显式创建实体。当您尝试创建列表时会发生这种情况,因为由于查询的延迟执行,在尝试将IEnumerable包装到
新列表
行之前,IEnumerable不会实际枚举

看起来你正试图自己检索订单。答案可能只是选择顺序,而不是尝试构建新的顺序:

IEnumerable<Order> MyQuery = from order in dataContext.GetTable<Order>()
                      where order.ID == 1
                      select order;
IEnumerable MyQuery=来自dataContext.GetTable()中的订单
其中order.ID==1
选择订单;
此外,没有理由使该枚举可枚举,然后将其转换为列表。您只需执行以下操作:

List<Order> list = (from order in dataContext.GetTable<Order>()
                      where order.ID == 1
                      select order).ToList();
List List=(从dataContext.GetTable()中的顺序)
其中order.ID==1
选择order);

问题不在列表结构中,而是在这一行:

select new Order() {ID = order.ID, OrderDate=order.OrderDate };
问题是您无法在查询中显式创建实体。当您尝试创建列表时会发生这种情况,因为由于查询的延迟执行,在尝试将IEnumerable包装到
新列表
行之前,IEnumerable不会实际枚举

看起来你正试图自己检索订单。答案可能只是选择顺序,而不是尝试构建新的顺序:

IEnumerable<Order> MyQuery = from order in dataContext.GetTable<Order>()
                      where order.ID == 1
                      select order;
IEnumerable MyQuery=来自dataContext.GetTable()中的订单
其中order.ID==1
选择订单;
此外,没有理由使该枚举可枚举,然后将其转换为列表。您只需执行以下操作:

List<Order> list = (from order in dataContext.GetTable<Order>()
                      where order.ID == 1
                      select order).ToList();
List List=(从dataContext.GetTable()中的顺序)
其中order.ID==1
选择order);

好吧,只有当您将查询转换为列表时,才真正执行查询。在此之前,它只是一个任意的
IQueryable

两个选项(假设您试图避免获取所有其他列):

  • 使用匿名类型:

    var query  = from order in dataContext.GetTable<Order>()
                 where order.ID == 1
                 select {ID = order.ID, OrderDate=order.OrderDate };
    
    var list = query.ToList();
    

  • 嗯,只有当您将查询转换为列表时,才真正执行查询。在此之前,它只是一个任意的
    IQueryable

    两个选项(假设您试图避免获取所有其他列):

  • 使用匿名类型:

    var query  = from order in dataContext.GetTable<Order>()
                 where order.ID == 1
                 select {ID = order.ID, OrderDate=order.OrderDate };
    
    var list = query.ToList();
    
  • 问题的第一个答案说明了发生了什么

    实体的使用模式是,它们在查询之外创建,并通过DataContext插入表中,然后通过查询检索,而不是由查询创建

    考虑一下,您可以使用.ToList()方法将其转换为列表。

    的第一个答案说明了发生了什么

    实体的使用模式是,它们在查询之外创建,并通过DataContext插入表中,然后通过查询检索,而不是由查询创建


    考虑一下,您可以使用.ToList()方法将其转换为列表。

    Jon:在您的选项1中,它可能不会编译,因为您正试图从IEnumerable构建列表,对吗?Oops将修复使用var(这就是我的意思:)的问题。我会小心连接环境中的断开连接的对象。@leppie:我也会,因此需要注意:)但是,在这种特殊情况下,它可能是合法的。Jon:在您的选项1中,它可能不会编译,因为您正试图从IEnumerable构建一个列表,对吗?Oops,将修复使用var(这就是我的意思:)在连接的环境中,我会小心断开连接的对象。@leppie:我也会,因此需要注意:)但是,在这种特殊情况下,它可能是合法的。假设数据是字符串对象,而不是顺序。我希望列表的类型为uint(将字符串对象转换为uint)。这可以一步完成吗?@G33kx0r它可能需要一个
    .AsEnumerable()。选择(i=>UInt32.Parse(i))在查询结束时,因为您的提供程序可能无法直接执行此操作。假设数据是字符串对象,而不是顺序。我希望列表的类型为uint(将字符串对象转换为uint)。这可以一步完成吗?@G33kx0r它可能需要一个
    .AsEnumerable()。选择(i=>UInt32.Parse(i))在查询结束时,因为您的提供商可能无法直接执行此操作。