Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何添加i分组<&燃气轮机';对象';要一份清单吗?_C#_.net_Wpf_List_Collections - Fatal编程技术网

C# 如何添加i分组<&燃气轮机';对象';要一份清单吗?

C# 如何添加i分组<&燃气轮机';对象';要一份清单吗?,c#,.net,wpf,list,collections,C#,.net,Wpf,List,Collections,所以。我有一个列表属性,它将具有相同名称的值分组 List<IGrouping<string, MyItemDTO>> MyList { get; set; } List MyList{get;set;} 它最初是通过IQueryable从数据库填充的 但是,如果我想使用代码将一个新项目添加到此列表中,我将如何进行?由于IGrouping是一个接口,我不能完全像这样更新它 IGrouping<string, MyItemDTO> newGroup = n

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

List<IGrouping<string, MyItemDTO>> MyList { get; set; }
List MyList{get;set;}
它最初是通过
IQueryable
从数据库填充的

但是,如果我想使用代码将一个新项目添加到此列表中,我将如何进行?由于IGrouping是一个接口,我不能完全像这样更新它

IGrouping<string, MyItemDTO> newGroup =  new IGrouping<string, MyItemDTO>();
MyList.Add(newGroup);
IGrouping newGroup=新建IGrouping();
MyList.Add(newGroup);
那不行。我想知道,‘我能做什么?’我怎样才能在那里得到一件新的东西

非常感谢

编辑:

一点看法:

想象一下有两个或更多的城市。这些城市都有一些各自的街道,并有相应的名字<代码>i分组确保街道名称在列表中只出现一次。因此,数据绑定的组合框不会重复任何值(通常是因为最终用户不知道街道属于哪个城市)

我的视图有两个组合框。一个用于街道,另一个用于城市。如果选择了一条街道,viewmodel将选择相应的城市,除非街道组中包含多条街道。此时,系统将提示用户手动选择街道所在的城市


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

可以使用
GroupBy
调用生成所需内容的
IEnumerable
,也可以根据实现
i分组。

使用此方法创建i分组值:

IGrouping<string, MyItemDTO> GetIGrouping(string key,MyItemDTO item)
{
    return new[] {item}.GroupBy(val => key).First();
}
IGrouping GetIGrouping(字符串键,MyItemDTO项)
{
返回新的[]{item}.GroupBy(val=>key).First();
}
或者,如果您希望组中有多个项目:

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

我想你真的不需要在你的酒店里进行
分组
,你需要的是一个像
字典
列表
等的集合

不过,如果您需要,下面是使用iGroup添加项目的方法

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

希望有帮助

你没有
i分组
是由
GroupBy
返回的内容。它的明确设计不是为了在提供程序之外进行构造。如果您坚持您当然可以实现自己的
i分组
——但更明智的方法是将
i分组
转换为其他内容,就像一本
字典
。你可能应该解释你原来的问题,以及为什么你认为
I分组
是解决问题的方法。你可以使用泛型创建一个新的I分组实例转到@PanagiotisKanavos。我更新了我的描述,提供了一个小的背景故事,说明是什么促使我这样做的。也许您可以再看一看?请注意,如果只是将其添加到列表中,其结果可能不正确,因为其目的是使列表包含唯一的分组(通常由
GroupBy
方法返回)。在编写对列表进行操作的代码时,需要考虑到这一点。我已经更新了描述以阐明该场景。出于好奇,字典怎么会更合适呢?
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; }
    }