具有嵌套集合的自定义对象

本文关键字:自定义 对象 集合 嵌套 | 更新日期: 2023-09-27 17:55:25

我创建了一个对象,该对象在其中一个属性中包含另一个集合。

这是主要对象:

public class MeterPrevReadInfo
{
    public int JobMeterID { get; set; }
    public string PreviousJobReference { get; set; }
    public FuelType MeterFuelType { get; set; }
    public List<MeterPrevReadRegInfo> Regs { get; set; }
    public DateTime DateMeterRead { get; set; }
}

这是子对象:

public class MeterPrevReadRegInfo
{
    public string RegisterID { get; set; }
    public string MeterRead { get; set; }
}

我需要将此对象绑定到转发器控件,我想在转发器中显示 DateMeterRead 属性和所有 MeterRead 属性。

使用 Linq 可以做到这一点吗?我可以使用数据库中的 t-sql 查询轻松完成此操作,但我只是认为应该可以在内存中执行此操作,而无需再次访问数据库的开销。

具有嵌套集合的自定义对象

不要混淆 - LINQ

不是数据访问层或 ORM(也许您正在考虑 LINQ-to-SQL,或 LINQ-to-Entities?)

您绝对可以使用 LINQ 查询内存中集合,尽管您的问题似乎与数据库有关。

我可以使用t-sql轻松做到这一点 从数据库中查询,但我只是 认为应该可以做到 这在内存中没有开销 再次访问数据库。

您可以在一个查询中从数据库中检索所有这些数据,然后构造对象。可以使用存储过程、LINQ to-SQL、实体框架或其他工具执行此操作。您应该选择最适合您要求的工具。我希望这只是需求的一小部分,所以退后一步,选择最好的工具,并使用该工具完成这项工作。

确定这是可能的。看起来你想要这样的东西:

 List<MeterPrevReadInfo> list = ...;
 var result = from item in list
              from info in item.Regs
              select new {item.DateMeterRead, info.MeterRead};

此查询定义具有所需两个属性的匿名对象列表。

可以使用

Linq Select 扩展方法访问表示所需模型的匿名对象,如下所示:

var readInfo = new MeterPrevReadInfo();
readInfo.Regs.Select(x => new {
                                        x.RegisterID, 
                                        x.MeterRead, 
                                        readInfo.DateMeterRead
                                       });