我有一个关于分组和Select()方法的问题。
假设我有一个IEnumerable<IGrouping<int, smth>>,如下所示:
var groups = list.GroupBy(x => x.ID);
其中list是list <smth>。
现在我需要以某种方式将每个IGrouping的值传递给另一个列表:
foreach (var v in structure)
{
v.ListOfSmth = groups.Select(...); // <- ???
}
有人能建议如何从IGrouping<int, smth>在这样的上下文中获得值(List<smth>)吗?
假设您有一个MyPayments类
public class Mypayment
{
public int year { get; set; }
public string month { get; set; }
public string price { get; set; }
public bool ispaid { get; set; }
}
你有一个我的支付列表
public List<Mypayment> mypayments { get; set; }
你要把名单按年分组。你可以这样使用linq:
List<List<Mypayment>> mypayments = (from IGrouping<int, Mypayment> item in yearGroup
let mypayments1 = (from _payment in UserProjects.mypayments
where _payment.year == item.Key
select _payment).ToList()
select mypayments1).ToList();
因为IGrouping<TKey, TElement>实现了IEnumerable<TElement>,你可以使用SelectMany把所有的IEnumerable一起放回一个IEnumerable:
List<smth> list = new List<smth>();
IEnumerable<IGrouping<int, smth>> groups = list.GroupBy(x => x.id);
IEnumerable<smth> smths = groups.SelectMany(group => group);
List<smth> newList = smths.ToList();
下面是一个构建/运行的示例:https://dotnetfiddle.net/DyuaaP
解决方案视频解说:https://youtu.be/6BsU1n1KTdo