对旧代码进行一些重构,负责的开发人员很久就离开了。
他遗赠了我的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>
。
它是什么,如何从函数中返回它?
答案 0 :(得分:8)
它返回一个包含两个属性的匿名类型列表:Order
和MemberName
。 技术上您可以返回匿名类型的列表(返回类型可以是object
或List<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;
}