首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Linq从一个对象类型列表创建另一个对象类型列表

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

Stack Overflow用户
提问于 2009-11-09 08:34:59
回答 3查看 29.7K关注 0票数 29

如果我有类型为A和B的类:

代码语言:javascript
复制
public class A
{
    public int TotalCount;
    public string Title;
}

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-09 08:55:42

代码语言:javascript
复制
List<B> listB = listA.Select(a => new B()
   {
        Count = a.TotalCount,
        Title = a.Title
   }).ToList();

用不同的语法做与eduncan的解决方案相同的事情。你挑吧..。

票数 52
EN

Stack Overflow用户

发布于 2009-11-09 08:39:36

代码语言:javascript
复制
var list = 
  from a in TableA
  select new B {
    Count = a.TotalCount,
    Title = a.Title
  };

您可以在select子句中新建一个B实例,并使用C# 3.0中的内联属性赋值功能来赋值属性。

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

代码语言:javascript
复制
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()有点多余。有时我用它来表明观点,其他人说它是绝对必要的。尽管如此,list对象本身仍然是ClassB的IQueryable。

然后,您可以在链的更高位置调用FetchAllOfClassB(),并使用IQuerable。它相当圆滑,而且效率很高。

票数 12
EN

Stack Overflow用户

发布于 2009-11-09 08:55:28

嗯,在我的脑海中(所以可能会有错误!):

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

也许能行得通。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1698495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档