合并列表的C#集合<;T>;带列表<;i分组<;T>&燃气轮机;

合并列表的C#集合<;T>;带列表<;i分组<;T>&燃气轮机;,c#,.net,linq,collections,C#,.net,Linq,Collections,我试图将这两个集合合并到一个列表中,但其中一个集合是list。我正在尝试将groupedSubscriptions(这是一个列表)与listofsubscriptionsecond(这是一个列表)合并,以创建FullListOfSubscriptions,最后是一个列表。请参阅下面的代码示例 我得到一个编译时错误: 严重性代码说明项目文件行抑制状态抑制状态 错误CS1503参数1:无法从“System.Collections.Generic.IEnumerable”转换为“System.Coll

我试图将这两个集合合并到一个列表中,但其中一个集合是
list
。我正在尝试将
groupedSubscriptions
(这是一个
列表
)与
listofsubscriptionsecond
(这是一个
列表
)合并,以创建
FullListOfSubscriptions
,最后是一个
列表
。请参阅下面的代码示例

我得到一个编译时错误:

严重性代码说明项目文件行抑制状态抑制状态 错误CS1503参数1:无法从“System.Collections.Generic.IEnumerable”转换为“System.Collections.Generic.IEnumerable”

我正在尝试的逻辑示例

List<Subscription> FullListOfSubscriptions = new List<Subscription>();

List<Subscription> ListOfSubscriptions = new List<Subscription>();
ListOfSubscriptions.Add(new Subscription() { SubscriptionId = 1, ParentProductId = 4, ChildProductId = 4, ParentProductName = "Product 1", ChildProductName = "Product 1", GroupId = 362 });
ListOfSubscriptions.Add(new Subscription() { SubscriptionId = 2, ParentProductId = 114, ChildProductId = 1, ParentProductName = "Product 2", ChildProductName = "Product 3", GroupId = 1 });
ListOfSubscriptions.Add(new Subscription() { SubscriptionId = 3, ParentProductId = 114, ChildProductId = 2, ParentProductName = "Product 2", ChildProductName = "Product 4", GroupId = 1 });

var groupedSubscriptions = ListOfSubscriptions.GroupBy(u => u.GroupId);
var flattenedSubscriptions = groupedSubscriptions.SelectMany(grp => grp.AsEnumerable()).ToList();

List<Subscription> ListOfSubscriptionsSecond = new List<Subscription>();
ListOfSubscriptionsSecond.Add(new Subscription() { SubscriptionId = 4, ParentProductId = 4, ChildProductId = 4, ParentProductName = "Product 1", ChildProductName = "Product 1", GroupId = 362 });
ListOfSubscriptionsSecond.Add(new Subscription() { SubscriptionId = 5, ParentProductId = 114, ChildProductId = 1, ParentProductName = "Product 2", ChildProductName = "Product 3", GroupId = 1 });
ListOfSubscriptionsSecond.Add(new Subscription() { SubscriptionId = 6, ParentProductId = 114, ChildProductId = 2, ParentProductName = "Product 2", ChildProductName = "Product 4", GroupId = 1 });

//FullListOfSubscriptions = ListOfSubscriptionsSecond.AddRange(groupedSubscriptions);

FullListOfSubscriptions = groupedSubscriptions
    .SelectMany(grp => grp.AsEnumerable())
    .Concat(ListOfSubscriptionsSecond); // <<= I'm getting error here
List FullListOfSubscriptions=new List();
List ListOfSubscriptions=新列表();
添加(新订阅(){SubscriptionId=1,ParentProductId=4,ChildProductId=4,ParentProductName=“Product 1”,ChildProductName=“Product 1”,GroupId=362});
添加(新订阅(){SubscriptionId=2,ParentProductId=114,ChildProductId=1,ParentProductName=“Product 2”,ChildProductName=“Product 3”,GroupId=1});
添加(新订阅(){SubscriptionId=3,ParentProductId=114,ChildProductId=2,ParentProductName=“Product 2”,ChildProductName=“Product 4”,GroupId=1});
var groupedSubscriptions=ListOfSubscriptions.GroupBy(u=>u.GroupId);
var flattedSubscriptions=groupedSubscriptions.SelectMany(grp=>grp.AsEnumerable()).ToList();
List ListofSubscriptionSecond=新列表();
ListofSubscriptionSecond.Add(新订阅(){SubscriptionId=4,ParentProductId=4,ChildProductId=4,ParentProductName=“Product 1”,ChildProductName=“Product 1”,GroupId=362});
ListofSubscriptionSecond.Add(新订阅(){SubscriptionId=5,ParentProductId=114,ChildProductId=1,ParentProductName=“Product 2”,ChildProductName=“Product 3”,GroupId=1});
ListofSubscriptionSecond.Add(新订阅(){SubscriptionId=6,ParentProductId=114,ChildProductId=2,ParentProductName=“Product 2”,ChildProductName=“Product 4”,GroupId=1});
//FullListOfSubscriptions=ListOfSubscriptionsSecond.AddRange(groupedSubscriptions);
FullListOfSubscriptions=groupedSubscriptions
.SelectMany(grp=>grp.AsEnumerable())

.Concat(第二个订阅列表);// 这取决于你到底想做什么。假设你有一门课,如下所示

公共类员工
{
公共字符串部门{get;set;}
公共字符串名称{get;set;}
}
然后你可以像这样合并

公共IEnumerable合并(IEnumerable员工、,
IEnumerable employeesByDept)
{
//只需合并所有员工
返回员工邮箱
.SelectMany(grp=>grp.AsEnumerable())//展平
.Concat(雇员);//Concat另一个
}
如果要将整个集合合并为
i分组
,可以有多种方法,其中一种方法是将已分组的集合展平,
concat
将另一个列表重新分组

public IEnumerable合并组(IEnumerable员工、,
IEnumerable employeesByDept)
{
返回员工邮箱
.SelectMany(grp=>grp.AsEnumerable())//展平
.Concat(雇员)//Concat另一个
.GroupBy(e=>e.Department);//再次分组
}
这里没有什么需要理解的:

  • 是一个高级集合接口,大多数集合(如果不是全部的话)都实现该接口。这些仅用于迭代,即检查收集和读取数据。它不允许任何形式的修改
  • IEnumerable
    的常用实现,它是一个具体的类,还支持修改
  • 列表可以分配给
    IEnumerable
    ,反之亦然。了解
  • 并了解

  • 请将代码和数据添加为文本(),而不是图像。图片:A)不允许我们复制和粘贴代码/错误/数据进行测试;B) 不允许基于代码/错误/数据内容进行搜索;和。如果图像添加了一些重要信息,而这些信息并非仅通过文本代码/错误/数据传达,则仅应在代码格式的文本之外使用图像。请展平分组列表,或者以某种方式解决以下事实:您有多组项目,而不仅仅是一个简单的项目列表。您知道分组在Linq中是如何工作的吗?在不知道如何修复组集合的情况下,很难推荐一种方法。我同意@gunr217的观点:了解您正试图合并的确切集合会很有帮助。是
    ListOfSubscriptions
    listofsubscriptionsecond
    吗?或者是
    groupedSubscriptions
    与其他内容一起使用?你所说的“平展分组列表”是指制作一个额外的列表我尝试了你的SelectMany想法,但我得到了相同的错误。groupedSubscriptions也会生成两条记录,但当我选择Many时,它会返回到三条记录?这是因为,
    concat
    返回一个
    IEnumerable
    ,您试图将其分配到
    列表中,请执行以下操作:
    FullListOfSubscriptions=groupedSubscriptions.SelectMany(grp=>grp.AsEnumerable()).concat(ListOfSubscriptionsSecond.ToList()