Intersecting Dictionary<string, List<Anime>> 属性 动漫 class
Intersecting Dictionary<string, List<Anime>> on a property of Anime class
我有一个这样的对象
public class Anime
{
public Guid Id {get; set;}
public DateTime? CreatedOn {get; set;}
}
然后我有一个列表字典,例如
Dictionary<string, List<Anime>> myLists = new Dictionary<string, List<Anime>>();
我正在对所有列表进行交集,但我只想对 Anime ID 进行交集,但仍然得到 List<Anime>
的结果,不知道如何具体强制它在ID。这是我拥有的:
myResult.AddRange(myLists.Values.Aggregate(new HashSet<Anime>(myLists.First().Value.ToList()), (h, e) =>
{
h.IntersectWith(e);
return h;
}));
有没有办法告诉它在 ID 属性 上相交,但仍然获得动漫列表的结果? (myResult
是 List<Anime>
)。
我想列表不能包含多个具有相同 ID 的动漫。
这应该有效:
var result = myLists.Values.SelectMany(p => p)
.GroupBy(a => a.Id)
.Where(g => g.Count() == myLists.Values.Count)
.Select(g => g.First());
属性 上的相交相当于 join
:
myResult.AddRange(myLists.Values.Aggregate((a, l) => a.Join(l, am => am.Id, lm => lm.Id, (am, lm) => am).ToList()));
我有一个这样的对象
public class Anime
{
public Guid Id {get; set;}
public DateTime? CreatedOn {get; set;}
}
然后我有一个列表字典,例如
Dictionary<string, List<Anime>> myLists = new Dictionary<string, List<Anime>>();
我正在对所有列表进行交集,但我只想对 Anime ID 进行交集,但仍然得到 List<Anime>
的结果,不知道如何具体强制它在ID。这是我拥有的:
myResult.AddRange(myLists.Values.Aggregate(new HashSet<Anime>(myLists.First().Value.ToList()), (h, e) =>
{
h.IntersectWith(e);
return h;
}));
有没有办法告诉它在 ID 属性 上相交,但仍然获得动漫列表的结果? (myResult
是 List<Anime>
)。
我想列表不能包含多个具有相同 ID 的动漫。 这应该有效:
var result = myLists.Values.SelectMany(p => p)
.GroupBy(a => a.Id)
.Where(g => g.Count() == myLists.Values.Count)
.Select(g => g.First());
属性 上的相交相当于 join
:
myResult.AddRange(myLists.Values.Aggregate((a, l) => a.Join(l, am => am.Id, lm => lm.Id, (am, lm) => am).ToList()));