如何从List<Skachkist>中筛选包含指定HrsID的Uchastniks的对象
解决方案:筛选包含指定HrsID的Uchastniks的Skachkist对象
问题出在你用了SelectMany——这个方法会把所有嵌套的Uchastniks集合平铺成一个单独的序列,所以你最后拿到的是符合条件的Uchastniks对象,而不是包含它们的Skachkist。
要实现你的需求,应该直接对Skachkis集合使用Where,并在条件里用Any()判断当前Skachkist的Uchastniks中是否存在符合要求的对象:
var selectedSkachkists = Skachkis.Where(skachkist => skachkist.Uchastniks.Any(uchastnik => uchastnik.HrsID == selectedID));
逻辑说明:
Where遍历每一个Skachkist对象Any()会检查当前Skachkist的Uchastniks集合中,是否至少有一个Uchastnik的HrsID等于selectedID- 最终返回的是所有满足该条件的
Skachkist对象集合
如果你需要同时获取Skachkist以及它里面符合条件的Uchastniks,可以用投影来包装结果:
var selectedWithMatchingUchastniks = Skachkis .Where(sk => sk.Uchastniks.Any(u => u.HrsID == selectedID)) .Select(sk => new { TargetSkachkist = sk, MatchingUchastniks = sk.Uchastniks.Where(u => u.HrsID == selectedID) });
内容的提问来源于stack exchange,提问作者SuxoiKorm
相关产品推荐
相关产品推荐

