【问题标题】:How to convert LINQ query result to list and return generic List?如何将 LINQ 查询结果转换为列表并返回通用列表?
【发布时间】:2014-02-06 07:58:00
【问题描述】:

我使用了通用的 ORM 列表 例子。

这是我的桌子。

Person table

Guid
Name
LastName

这是我的结构类。

 public struct PersonItem   // database and class field names are the same
    {
        public Guid   Guid{ get; set; } 
        public string Name { get; set; }
        public string LastName { get; set; }
    }


  public struct PersonItems
    {
        public PersonItems()
        {
            Items = new List<PersonItem>();
        }

        public List<PersonItem> Items { get; set; }
    }

我正在使用这样的,没有问题,但我总是要写字段的

public PersonItems GetPersons()
        {
            var query = (from p in _DbEntities.t_Crew
                         select p).ToList();

            if (query != null)
            {
                foreach (var item in query)
                {
                    _PersonItems.Items.Add(new PersonItem
                        {
                            Guid = item.Guid,
                            Name = item.Name,
                            LastName = item.LastName

                        });
                }
            }

            return _PersonItems;

        }   


   public PersonItems GetPersons()
    {
        PersonItems personItems = new PersonItems();

        var query = from p in _DbEntities.t_Person
                    select p; >> this here query I need to convert linq query result to list

       personItems = query.ToList();
       return personItems ;
    }

error

无法将 System.Collections.Generic.List' 类型隐式转换为 PersonData.PersonItems'。

【问题讨论】:

    标签: linq generics data-structures generic-collections


    【解决方案1】:

    试试这个

     public PersonItems GetPersons()
        {
            PersonItems personItems = new PersonItems();
    
            var query = (from p in _DbEntities.t_Person
                        select new PersonItems 
                        {
                            test = p.SomeName,
                            //Other Stuff
                            //...
                        }).ToList();
           return query;
        }
    

    【讨论】:

      【解决方案2】:

      与您的 GetPersons() 方法的其他版本相比,我认为这一行:

      personItems = query.ToList();
      

      应该是这样的:

      personItems.Items = query.ToList();
      

      关于最新错误的更新。您不能将t_Person 的列表分配给Item 类型为PersonItem 的属性列表。因此,您的查询需要调整以返回 PersonItem 列表:

      var query = from p in _DbEntities.t_Person
                  select new PersonItem
                              {
                                  Guid = p.Guid,
                                  Name = p.Name,
                                  LastName = p.LastName
                              };
      

      或其他选项是将Item 属性的定义更改为t_Person 列表:

      public List<t_Person> Items { get; set; }
      

      【讨论】:

      • 同样的错误信息??如果不同,请发布最新的错误消息
      • 是同样的错误信息.. personItems.Items = query.ToList();错误 1 ​​无法将类型 System.Collections.Generic.List' 隐式转换为 System.Collections.Generic.List' C:\TFS\Projects\Ship\PersonData\Persons.cs 50 31 个人数据
      • 检查我更新的答案。 Items 属性与 linq 查询返回的类型不同,因此出现转换错误
      【解决方案3】:

      无法将类型 System.Collections.Generic.List' 隐式转换为 PersonData.PersonItems'

      上述错误表明您正在尝试将通用列表转换为 PersonItems。

      所以在这一行,query.ToList() 代码返回 List&lt;PersonItem&gt; 而不是 PersonItems

          var query = from p in _DbEntities.t_Person
                      select p; >> this here query I need to convert linq query result to list
      
         personItems = query.ToList();
         return personItems ;
      

      这就是上面代码行失败的原因。

      【讨论】:

      • 所以是的,我已经尝试过了......但同样的错误再次出现 List crampItems = new List();我不需要那个,因为他们已经有一个 List 类
      【解决方案4】:

      这个呢? 更改 PersonItems 的 .ctor:

      public struct PersonItems
      {
          public PersonItems(List<PersonItem> items)
          {
              Items = items;
          }
      
          public List<PersonItem> Items { get; set; }
       }
      

      然后是GetPersons()方法:

      public PersonItems GetPersons()
      {    
          return new PersonItems(_DbEntities.t_Person.ToList());
      }
      

      【讨论】:

      • 因为有时候我在使用wcf服务和table join,所以我不能使用你的建议
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 2016-05-27
      相关资源
      最近更新 更多