代码之家  ›  专栏  ›  技术社区  ›  Jeremy

使用LINQ从另一个对象类型列表中创建一个对象类型列表

  •  19
  • Jeremy  · 技术社区  · 15 年前

    如果我有A型和B型的课程:

    public class A
    {
        public int TotalCount;
        public string Title;
    }
    
    public class B
    {
        public int Count;
        public string Title;
    }
    

    我有一个实例A实例列表,使用LINQ创建和填充类型B列表的最有效方法是什么?

    3 回复  |  直到 8 年前
        1
  •  30
  •   Daniel M    15 年前
    List<B> listB = listA.Select(a => new B()
       {
            Count = a.TotalCount,
            Title = a.Title
       }).ToList();
    

    与Eduncan的解决方案相同,语法不同。选你的……

        2
  •  11
  •   dckuehn sasha_gud    8 年前
    var list = 
      from a in TableA
      select new B {
        Count = a.TotalCount,
        Title = a.Title
      };
    

    在select子句中新建一个b实例,并使用c 3.0中的inline属性分配功能分配属性。

    内联映射它的优点来自延迟执行LINQ语句。Linq将映射修改后的语句,并从IQueryable中执行它。例如:

    public class ClassA 
    {
      public int TotalCount;    
      public string Title;
    }
    
    public class ClassB
    {
      public int Count;
      public string Title;
    }
    
    public IQueryable<ClassB> FetchAllOfClassB()
    {
      var list = 
        from a in TableOfClassA
        select new ClassB {
          Count = a.TotalCount,
          Title = a.Title
        };
    
      return list.AsQueryable();
    }
    

    从技术上讲, AsQueryable() 有点多余。有时我用它来说明问题,其他人说这是绝对必要的。同样,列表对象本身也可以查询ClassB。

    然后你可以打电话 FetchAllOfClassB() 再往上一点,使用iquerable。它很光滑,很有效率。

        3
  •  0
  •   Jeff Paquette    15 年前

    嗯,在我的头上(所以可能会有错误!):

    List< B > = from a in listOfA select new B(a.count, a.title);

    可能会成功。