- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要构建一个从两个不同的 Excel 源读取的父子对象的类型化列表:一个描述父对象,另一个描述子对象。层次结构永远只有 2 层。
读入 excel 不是问题,因为它被读入 2 个非类型化数据表,但加入信息是问题。
结构很简单:
Parent 有一个 ID 和一些文本字段 child 有一个 parentID(所以它是 1-m)和一些文本字段
这些要填充到的对象如下所示:
public class ParkingSites
{
public List<ParkingLot> Lots { get; set; }
public ParkingSites(List<ParkingLot> arg)
{
Lots = arg;
}
}
public class ParkingLot
{
public List<Bay> Bays{ get; set; }
public int Id { get; set; }
public List<string> ParkingLotDetails { get; set; }
public ParkingLot()
{
}
}
public class Bay
{
public List<string> BayDetails { get; set; }
public int ParentId { get; set; }
public Bay()
{
}
}
Excel 源具有固定的列顺序,父工作表的第一列是 parentId,子工作表的第一列也是 parentId。
编辑:玩了一会儿之后,我只是让父类和子类都输入了类型,因为让它们大多不输入类型的最初原因导致的问题多于它避免的问题。这是一个更大项目的一部分,在该项目中,非类型化是解决我们在其他类上使用非分层数据的问题的更好解决方案。
最佳答案
您可以简单地按父 ID 对子列表进行分组,然后遍历父项并添加属于它的每个子项。
例如,您可以使用 ToLookup
:
// assuming you have all Bay instances in a collection called bays
var baymap = bays.ToLookup(b => b.ParentId);
// and all ParkingLot instances in a collection called lots
foreach(var lot in lots)
lot.Bays.AddRange(baymap[lot.Id]);
或者,使用详细信息列表中的第一个元素:
var baymap = bays.ToLookup(b => b.BayDetails[0]);
foreach(var lot in lots)
lot.Bays.AddRange(baymap[lot.ParkingLotDetails[0]]);
或者,使用 Where
而不进行查找(可能更慢,取决于您的数据):
foreach(var lot in lots)
lot.Bays.AddRange(bays.Where(b => b.ParentId == lot.Id));
关于c# - 在linq中加入两个数据表作为父子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24609239/
我正在开发一个需要能够平均三个数字的 Facebook 应用程序。但是,它总是返回 0 作为答案。这是我的代码: $y = 100; $n = 250; $m = 300; $number = ($y
我只是无法弄清楚这一点,也找不到任何对我来说有意义的类似问题。我的问题:我从数据库中提取记录,并在我的网页上以每个面板 12 条的倍数显示它们。因此,我需要知道有多少个面板可以使用 JavaScrip
我是一名优秀的程序员,十分优秀!