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

时间:2011-05-09 10:49:15

标签: c#

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

这是主要对象:

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查询轻松地完成它,但我只是认为应该可以在内存中执行此操作,而无需再次访问数据库的开销。

3 个答案:

答案 0 :(得分:1)

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

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

  

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

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

答案 1 :(得分:0)

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

 List<MeterPrevReadInfo> list = ...;

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

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

答案 2 :(得分:0)

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

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