gpt4 book ai didi

c# - 如何使用Multi-Mapper创建多个一对多的对象层次结构

转载 作者:行者123 更新时间:2023-11-30 22:22:26 24 4
gpt4 key购买 nike

我有如下两个模型

public  class FItem
{
public FItem() { }

public int RecordId { get; set; }
public int MarketId { get; set; }
public string ItemName { get; set; }
public string ItemFamily { get; set; }
public string HoverFamily { get; set; }
public string ItemDesc { get; set; }

public IEnumerable<FSubsystem> FSubsystems { get; set; }
}

public class FSubsystem
{
public FSubsystem() { }

public int FSubsystemId { get; set; }
public int RecordId { get; set; } //Foreign key
public int supplierId { get; set; }
public int SubSystemTypeId { get; set; }
public double Percentage { get; set; }
public double? Value { get; set; }
}

public class FReferences
{
public FReferences() { }

public int RecordID { get; set; } //Foreign key
public int SourceID { get; set; }
public DateTime SourceDate { get; set; }
public string Reference { get; set; }
public int? ReferenceID { get; set; }
}

我使用 dapper 获取数据并放入对象中。代码如下

using (var multi = mapperConnection.QueryMultiple("USP_FetchMarketRecords", parameters, (SqlTransaction)null, 1000000, CommandType.StoredProcedure))
{
IEnumerable<MarketRecord.FItem> FItem = multi.Read<MarketRecord.FItem>().ToList();
IEnumerable<MarketRecord.FSubsystem> FSubsystem = multi.Read<MarketRecord.FSubsystem>().ToList();
}

现在我想获取每个记录 ID 的子系统,并将它们放入 Fitem 的 FSubsystems 属性中。我该怎么做?

这里我只展示了与 FItem 即 Fsubsystem 的一对多关系。但是我有很多 Fitem 的一对多表,如 FReferenc、FUnit 等。对于所有外键都是 RecordId 本身。

这可以通过 linq 查询来完成吗?还是我应该使用一些差异技术?

最佳答案

Dapper 不包含任何用于重建不同集合的父/子关系的内置内容。

您可以将场景概括为:

static void ApplyParentChild<TParent, TChild, TId>(
this IEnumerable<TParent> parents, IEnumerable<TChild> children,
Func<TParent, TId> id, Func<TChild, TId> parentId,
Action<TParent, TChild> action)
{
var lookup = parents.ToDictionary(id);
foreach (var child in children)
{
TParent parent;
if (lookup.TryGetValue(parentId(child), out parent))
action(parent, child);
}
}

所以如果我们有:

List<Parent> parents = new List<Parent> {
new Parent { Id = 1 },
new Parent { Id = 2 }
};
List<Child> children = new List<Child> {
new Child { Id = 3, ParentId = 1},
new Child { Id = 4, ParentId = 2},
new Child { Id = 5, ParentId = 1}
};

你可以使用:

parents.ApplyParentChild(children, p => p.Id, c => c.ParentId,
(p,c) => p.Children.Add(c));

关于c# - 如何使用Multi-Mapper创建多个一对多的对象层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13836205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com