繁体   English   中英

如何将IGrouping <>'对象'添加到列表中?

[英]How do you add an IGrouping<> 'object' to a list?

所以。 我有一个列表属性,将具有相同名称的值进行分组;

List<IGrouping<string, MyItemDTO>> MyList { get; set; }

它最初是通过IQueryable<>从数据库填充的。

但是说我想使用代码将新项目添加到此列表中,我将如何处理? 由于IGrouping是一个接口,因此我无法像这样完全更新它;

IGrouping<string, MyItemDTO> newGroup =  new IGrouping<string, MyItemDTO>();
MyList.Add(newGroup);

那不行 我想知道,“做什么?” 如何在那里购买新物品?

非常感谢。

编辑:

一点观点:

想象有两个或多个城市。 这些城市分别有一些街道,每个街道都有相称的名称。 IGrouping<,>确保街道名称在列表中仅出现一次。 因此,数据绑定的组合Combobox不会重复任何值(通常是因为最终用户不知道街道所属的城市)。

我的视图有两个Combobox 一个用于街道,另一个用于城市。 如果选择了一条街道,则视图模型将选择相应的城市,除非该街道组中包含的街道不止一条。 届时,系统将提示用户手动选择街道所在的城市。

我认为IGrouping<,>将适合此目的,因为它是使用GroupBy()扩展方法时的默认返回类型。 仍然可以接受建议。

使用此方法创建IGrouping值:

IGrouping<string, MyItemDTO> GetIGrouping(string key,MyItemDTO item)
{
    return new[] {item}.GroupBy(val => key).First();
}

或者如果您要分组中的几个项目:

IGrouping<string, MyItemDTO> GetIGrouping(string key,IEnumerable<MyItemDTO> items)
{
    return items.GroupBy(val => key).First();
}

根据对有关该特定方法的问题的此答案,可以对产生所需内容的IEnumerable<T>使用GroupBy调用,或者实现IGrouping<TKey, TElement>

我认为您真的不需要在您的Property中进行IGrouping ,而是需要像DictionaryList等这样的集合。

如果您仍然想要,那么这里就是您应该使用IGrouping添加项目的方法

var t = new List<Test>();
foreach (var item in t.GroupBy(x => x.A))
{
  A.MyList.Add(item);
}

public static class A
{
    public static List<IGrouping<string, Test>> MyList { get; set; }
}

 public class Test
    {
        public string A { get; set; }
        public int B { get; set; }
    }

希望有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM