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

本文关键字:属性 类型 集合 选择 于集合 LINQ- | 更新日期: 2023-09-27 18:24:20

我有以下类:

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值作为单独的属性添加到匿名对象?

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

你不能,除非你知道编译时列表中的项数。匿名类型的思想是它们是静态类型的。编译器在编译时知道所有属性及其类型是什么。如果你不知道这些信息,你就不能使用它。

例如,如果你知道总是有两个项目,那么你可以做这样的事情:

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();