C# - 合并具有相同属性的多个LINQ集合

6

也许现在已经很晚了,但我在这里被卡住了。我正在尝试将具有相同属性的多个列表合并为一个。我以为LINQ的.UNION能做到这一点,但我错了。下面是我的一些列表示例:

LIST1 (report names):
Date      Name    Title         Product
02/01/13  Steve   Hello World   Report
02/05/13  Greg    Howdy         Report

LIST2 (song names):
Date      Name    Title         Product
01/01/13  John    Time          Song
01/05/13  Bob     Sorry         Song

LIST3 (games names):
Date      Name      Title         Product
12/01/12  Google    Bike Race     Game
12/05/12  Apple     Temple Run    Game

我的课程非常简单。以下是它的样子:

public class MyClass {
  public DateTime Date { get; set; }
  public string Name { get; set; }
  public string Title { get; set; }
  public string Product { get; set; }
}

如果你想知道,我使用了这个 LINQ 查询来获取上面列表中的一个:

var finalList = Games
  .Select (s => new MyClass { 
    Date = (System.DateTime) s.Games.Creation_date,
    Name = s.Games.Last_name,
    Title = string.Format("{0} (Report)", s.Game.Headline),
    Product="Report"
  })
  ;

到目前为止,这很容易,但我想把所有的列表合并成一个。因此,我的最终列表应该如下所示:

Date      Name    Title         Product
02/01/13  Steve   Hello World   Report
02/05/13  Greg    Howdy         Report
01/01/13  John    Time          Song
01/05/13  Bob     Sorry         Song
12/01/12  Google  Bike Race     Game
12/05/12  Apple   Temple Run    Game

我曾以为一个 UNION 命令就能解决这个问题:

var newList = List1.Union(List2).Union(List3);

但我没有得到期望的输出结果。
Date      Name    Title         Product
02/01/13  Steve   Hello World   Report
02/05/13  Greg    Howdy         Report
01/01/13  Bob     Time          Game
01/05/13  John    Sorry         Song
12/01/12  Google  Bike Race     Song
12/05/12  Apple   Temple Run    Game

有什么想法,我在这里做错了什么吗?

使用 Union 时会得到什么结果? - cuongle
2个回答

16

尝试:

list1.Concat(list2).Concat(list3);

你不想使用Union(无论是否工作)因为它执行集合并操作。


1
你可以尝试使用AddRange命令,应该像这样:


var FullList = list1.AddRange(list2).AddRange(list3);

或者保险起见的方式是:
var FullList = list1.Concat(list2).Concat(list3).ToList(); //Personally i would use this

或者你也有


var FullList = new[] { list1, list2, list3 }.SelectMany(a => GetAllProducts(a)).ToList();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接