IQueryable的<a> to list<b> type conversion, when a &amp; b having similar signature using LINQ</b></a>

时间:2013-11-19 04:48:05

标签: c# asp.net-mvc-3 entity-framework linq-to-sql linq-to-entities

我遇到了linq的一些基本问题,我试图谷歌但没有得到理想的重播。

让我们说我们有两个类似签名的类似:

public class A
    {
        public int a { get; set; }
        public int b { get; set; }
        public int c { get; set; }
    }

    public class B
    {
        public int x { get; set; }
        public int y { get; set; }
        public int z { get; set; }
    }

这里A是数据上下文类,它是在创建.edmx文件时由框架生成的。 B是我的自定义类,用于将数据传输到UI。我正在使用A&amp; A查询数据库。获得一个可查询的列表。现在我需要将此列表转换为另一个类型B的列表。我该怎么做?

3 个答案:

答案 0 :(得分:6)

您需要使用Select从一种类型投射到另一种类型,然后ToList创建一个列表:

// Property names changed to follow .NET naming conventions
var list = query.Select(a => new B { X = a.A, Y = b.B, Z = c.C })
                .ToList();

编译器和运行时不关心你的类型是否具有相同的属性(在这种情况下它们没有 - 它们有不同的名称) - 它们仍然是完全不同的类型。

答案 1 :(得分:2)

假设您的查询方法返回IEnumerable<A>,您可以执行以下操作。

IEnumerable<A> myList = SomeMethod();

var myModelList = myList.Select(a => new B(){x = a.A, y = a.B, z = a.C});

答案 2 :(得分:2)

选择时您将使用投影。

var myQuery = (from a in context.A
              select new B{
                  x = a.A,
                  y = a.B,
                  z = a.C
               });

return myQuery.ToList();