LINQ - 选择基于集合属性的匿名类型

时间:2013-07-22 15:24:16

标签: c# linq

我有以下课程:

public class DistributionItem
{

    public int DeviceID { get; set; }
    public string DeviceName { get; set; }
    public double? Export { get; set; }
    public double? Import { get; set; }
    public List<double?> Tarrifs { get; set; }
    public bool HasChild { get; set; }
    public int OrderNum { get; set; }
    public double PF { get; set; }
    public int? MaxDmd { get; set; }
    public string ImageUrl { get; set; }
    public int ParentID { get; set; }
    public double? Total { get; set; }
}

我想在这个类的List上创建一个LINQ Select来拉出一些像这样的属性:

        return data.Select(x => new
        {
            x.DeviceID,
            x.DeviceName,
            x.HasChild,
            x.KwhImport,
            x.KwhExport,
            x.MaxDmd,
            x.ParentID
        }).ToList();

如何将Tarrifs值作为单独的属性添加到匿名对象?

1 个答案:

答案 0 :(得分:8)

除非您在编译时知道列表中的项目数,否则不能。匿名类型的想法是它们静态类型。编译器在编译时知道所有属性及其类型是什么。如果您不知道该信息,则不能使用。

如果您知道例如总是有两个项目,那么您可以执行以下操作:

return data.Select(x => new
{
    x.DeviceID,
    x.DeviceName,
    x.HasChild,
    x.KwhImport,
    x.KwhExport,
    x.MaxDmd,
    x.ParentID,
    Tarrifs1 = x.Tarrifs[0],
    Tarrifs2 = x.Tarrifs[1],
}).ToList();