6

深夜かもしれませんが、ここで困っています。同じプロパティを持つ複数のリストを 1 つに結合しようとしています。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"
  })
  ;

ここまではとても簡単ですが、すべてのリストを 1 つにまとめたいと考えています。最終的なリストは次のようになります。

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

私がここで間違っていることについて何か考えはありますか?

4

2 に答える 2

16

試す:

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

Unionユニオンを設定するので、とにかく使用したくない(動作するかどうかに関係なく)。

于 2013-02-07T04:28:17.553 に答える
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();
于 2013-02-07T04:50:02.993 に答える