【发布时间】:2019-02-20 16:43:50
【问题描述】:
我尝试使用 linq 将字典列表(动态)合并到一个给定对象的单个列表中,我看到了许多与此类似的问题,但是在他们的情况下,他们总是考虑已知数量的字典。
嗯,这是我的结构:
我有一个返回列表对象的查询,如下所示:
public class MyDto
{
public Dictionary<string, string> JsonDictionary { get; set; }
public Guid SomeId1{ get; set; }
public Guid SomeId2{ get; set; }
}
使用 linq 我正在这样做:
var q = _uow.TableWithJson.GetAll()
.Include(a=> a.TableId1)
.Include(a=> a.TableAux)
.ThenInclude(b=> b.TableId2)
.Select(r => new MyDto
{
SomeId1 = r.tableId1.Id,
SomeId2 = r.tableId2.Id,
JsonDictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(r.JsonContent)
});
最后,我得到了这样的结果;
{
SomeId1: xxxxx,
SomeId2: yyyyy,
JsonDictionary: [
{key: key1, value: value 1}
{key: key1, value: value 2}
{key: key1, value: value 3}
{key: key1, value: value 4}
],
},
{
SomeId1: xxxxx,
SomeId2: yyyyy,
JsonDictionary: [
{key: key4, value: value 4}
{key: key5, value: value 5}
{key: key6, value: value 6}
],
}, // many other objects with different ids and different dictionaries.
如你所见,在上面的 sn -p 中 SomeId1 和 SomeId2 两个对象是相同的。因此,在这种情况下,我想将这些对象分组,将 JsonContent 字段合并到一个字典中。
也尝试使用 .GroupBy 但我无法将此 jsonContent 合并为一个聚合。
帮助!!!请! =) 拥抱
【问题讨论】:
-
你试过 Enumerable.Zip docs.microsoft.com/en-us/dotnet/api/…
-
您可以通过覆盖 HashSet 并将您的 someid 定义为指定重复的键来执行此类操作,但仅当键和内容相同时才返回 false 否则只需添加内容.. .
-
除非 ID1 和 ID2 相同,否则不能合并。如果它们相同,则必须检查键是否已存在,因为您不必在字典中键入相同的键。
标签: c# entity-framework linq .net-core