用于返回匿名类型列表的方法的返回类型是什么?

时间:2014-07-15 15:44:08

标签: c# linq list

对旧代码进行一些重构,负责的开发人员很久就离开了。

他遗赠了我的Linq:

var orders = memberOrders
   .Join(members, x => x.MemberID, y => y.MemberID, (x,y) => new { Order = x , y.MemberName })
   .OrderByDescending(x => x.Order.MailingDate).ToList();

创建某种双值列表,其中Order对象连接到该对象的MemberName字符串。

我想要一个函数来返回它。但是,我无法弄清楚函数需要返回的类型。

致电GetType()会将其显示为List`1,这并非常有帮助。它看起来像是由编译器在运行中构造成自定义对象的List<T>

它是什么,如何从函数中返回它?

3 个答案:

答案 0 :(得分:8)

它返回一个包含两个属性的匿名类型列表:OrderMemberName技术上您可以返回匿名类型的列表(返回类型可以是objectList<dynamic>),但您需要调用者使用反射或{{1}访问属性。

创建新类型(或使用现有类型)并返回 的列表更安全。

答案 1 :(得分:1)

它是在以下位置创建的匿名类型列表:

new { Order = x , y.MemberName }

答案 2 :(得分:1)

这是一个具有两个属性的匿名类型的对象列表。

第一个属性称为Order,第二个属性称为MemberName

  

我想要一个函数来返回它。但是,我无法弄清楚是什么   键入它是函数需要返回。

如果您可以使用这两个属性定义一个类,然后返回它们的序列,那将更有意义。如下所示:

public class ClassName
{
    public TypeOfOrder Order { get; set; }
    public TypeOfMemberName MemberName { get; set; }   
}

然后您声明获取订单的方法。

public IEnumerable<ClassName> GetOrders()
{
   var orders = memberOrders.Join(members, 
                                  x => x.MemberID, 
                                  y => y.MemberID, 
                                 (x,y) => new ClassName 
                                 { 
                                     Order = x,
                                     MemberName = y.MemberName 
                                 }).OrderByDescending(x => x.Order.MailingDate);           
    return orders;
}