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

Jer*_*emy 20 linq linq-to-objects

如果我有A类和B类:

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

public class B
{
    public int Count;
    public string Title;
}
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*l M 34

List<B> listB = listA.Select(a => new B()
   {
        Count = a.TotalCount,
        Title = a.Title
   }).ToList();
Run Code Online (Sandbox Code Playgroud)

与eduncan的解决方案具有不同的语法相同.随便挑选..


edu*_*911 11

var list = 
  from a in TableA
  select new B {
    Count = a.TotalCount,
    Title = a.Title
  };
Run Code Online (Sandbox Code Playgroud)

您在select子句中新建了B实例,并使用C#3.0中的内联属性赋值功能分配属性.

将其内联映射的优点来自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();
}
Run Code Online (Sandbox Code Playgroud)

从技术上讲,这AsQueryable()有点多余.有时候我会用它来说明问题,其他人说这是绝对必要的.尽管如此,列表对象本身是ClassB的IQueryable.

然后你可以FetchAllOfClassB()进一步调用链,并使用IQuerable.它非常漂亮,高效.

  • 即将写这样的东西,但你已经覆盖了它!+1 (2认同)
  • 我喜欢linq.+1. (2认同)