2011-05-09 65 views
0

我创建了一个对象,该对象在其中一个属性中包含另一个集合。带嵌套集合的自定义对象

这是主要的对象:

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; } 
} 

我需要这个对象Repeater控件绑定,我想展现DateMeterRead财产和所有MeterRead中继器的属性。

这可能使用Linq?我可以很容易地使用数据库中的t-sql查询来做到这一点,但我只是觉得应该可以在内存中执行此操作,而不需要另外访问数据库。

回答

0

确定这是可能的。它看起来像你想是这样的:

List<MeterPrevReadInfo> list = ...; 

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

此查询定义你想要的两个属性的匿名对象的列表。

+0

正是我所需要的。谢谢。 – Martin 2011-05-09 12:53:50

0

您可以访问一个匿名对象,表示通过使用LINQ的Select扩展方法如下您需要的模式:

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

不要误会 - LINQ是不是一个数据访问层或ORM(也许你正在考虑LINQ到SQL或LINQ到实体?)

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

我可以很容易地做到这一点使用来自数据库的T-SQL查询 ,但我只是 想通应该能够做到这 在内存中没有的 再次访问数据库的开销。

您可以从一个查询中的数据库中检索所有这些数据,然后构造对象&。您可以使用存储过程,LINQ-to-SQL,Entity Framework或其他工具来完成此操作。您应该根据您的要求选择最佳工具。我希望这是要求的一小部分,所以退一步,选择最好的工具,并使用该工具完成这项工作。