2017-07-19 215 views
1

我有以下LINQ查詢的數據表:LINQ查詢,加入多個選擇

string[] sourceNames = this.dt 
        .AsEnumerable() 
        .Select<System.Data.DataRow, String>(x => x.Field<String>("Name")) 
        .ToArray(); 

string[] sourceSurnames = this.dt 
     .AsEnumerable() 
     .Select<System.Data.DataRow, String>(x => x.Field<String>("Surname")) 
     .ToArray(); 

string[] sourceSecondSurnames = this.dt 
     .AsEnumerable() 
     .Select<System.Data.DataRow, String>(x => x.Field<String>("Second Surname")) 
     .ToArray(); 

string[] src = sourceNames.Union(sourceSurnames).Union(sourceSecondSurnames).ToArray(); 

表具有某些領域,他們中的一些上面:名,姓,二姓......等等。

我在這裏要做的是隻加入一個三個linq查詢。最終目標是獲得一組字符串,即src。

我該怎麼做?

+0

那麼,什麼是不與上面的代碼工作? – DavidG

+0

你目前的代碼是做什麼的?這與你想要的**有什麼不同? – mjwills

回答

1

你可以用SelectMany有它在一個單一的查詢容易:

string[] src = dt.AsEnumerable() 
    .SelectMany(row => new[]{ row.Field<String>("Name"),row.Field<String>("Surname"),row.Field<String>("Second Surname")}) 
    .Distinct() 
    .ToArray(); 
1
  var everything = dt 
      .AsEnumerable() 
      .Select(x => x.Field<string>("Name")) 
      .ToArray().Concat(dt.AsEnumerable() 
      .Select(x => x.Field<string>("Surname")) 
      .ToArray()).Concat(dt 
       .AsEnumerable() 
       .Select(x => x.Field<string>("Second Surname")) 
       .ToArray()); 

使用Concat可以解決這個問題。

+0

這是一個問題或答案? – DavidG

+0

這是一個答案和一個問題,用戶提出了一個問題,以檢查它是否解決了他的問題。 – milorads

+0

答案不應該包含問題,但這是評論的目的。 – DavidG

1

在查詢語法這將是

var src = (from row in dt.AsEnumerable()    
      from n in new[]{ row.Field<String>("Name"),row.Field<String>("Surname"),row.Field<String>("SecondSurname")} 
      select n).Distinct().ToArray();