【问题标题】:IQueryable<a> to list<b> type conversion, when a & b having similar signature using LINQIQueryable<a> 到 list<b> 类型转换,当 a & b 使用 LINQ 具有相似签名时
【发布时间】:2013-12-02 12:36:54
【问题描述】:

我在使用 linq 时遇到了一些基本问题,我尝试 google,但没有得到所需的结果。

假设我们有两个具有几乎相似签名的类,如下所示:

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 查询数据库并获得一个 iqueryable 列表。现在我需要将此列表转换为另一个 B 类型的列表。我该怎么做?

【问题讨论】:

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


    【解决方案1】:

    假设您的查询方法返回IEnumerable&lt;A&gt;,您可以执行以下操作。

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

    【讨论】:

      【解决方案2】:

      您将在选择时使用投影。

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

      【讨论】:

        【解决方案3】:

        你需要使用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();
        

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

        【讨论】:

        • @TGH:我们不知道这段代码在哪里,我试图避免做出任何假设——我只是按要求回答问题。我不确定我在哪里看到我的答案和你的答案之间存在显着差异 - 我有query,你有一个电话到SomeMethod()...我的代码中的query 变量很容易只需通过调用SomeMethod()...
        • 是的,这是真的。重要的部分是 Select(a => new)。
        猜你喜欢
        • 2011-03-03
        • 1970-01-01
        • 2019-10-23
        • 2021-04-03
        • 1970-01-01
        • 2011-12-03
        • 2012-10-11
        • 2012-03-18
        • 1970-01-01
        相关资源
        最近更新 更多