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

时间:2018-03-20 12:50:41

标签: c# .net wpf list collections

因此。我有一个列表属性,用于对具有相同名称的值进行分组;

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()扩展方法时的默认返回类型。仍然愿意接受建议。

3 个答案:

答案 0 :(得分:2)

使用此方法创建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();
}

答案 1 :(得分:0)

使用产生所需内容的GroupBy上的IEnumerable<T>来电,或按this answer to a question about that particular approach实施IGrouping<TKey, TElement>

答案 2 :(得分:0)

我认为您的财产中确实不需要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; }
    }

希望有所帮助!!