2017-07-14 16 views
-1

を選択:LINQ一覧<A>のは、私が持っていると言う多くの<A,B>

List<string> sqlServerNames; 

と方法:

List<string> GetDatabases(string serverName); 

そして私は、単一のクエリは{serverNameの、databaseNameの}のリストを取得したい

Linqでこれを行う方法はありますか?

sqlServerNames.???? 

ですから、例えば、私は2つのサーバーを持っている場合は、 ""、および "SQL2016"。

And "." has "db1", "db2" 
And "SQL2016" has "db3" 

私がしたいと思います:匿名型とおそらく

".", "db1" 
".", "db2" 
"SQL2016", "db3" 

を。

+0

あなたはペア '{サーバー、データベース}'やペア '{サーバー、データベースの一覧を}'取得したいですか? –

+0

この最初のもの。 {server、database} – Derek

答えて

3

ただ、何かがこのようになります試してみてください。

var tuples = sqlServerNames.SelectMany(server => GetDatabases(server).Select(db => Tuple.Create(server, db))).ToList() 
2

あなたはSelectManyメソッドを使用することができます

sqlServerNames 
    .SelectMany(sn => GetDatabases(sn) 
         .Select(dbn => new { 
              ServerName = sn, 
              DatabaseName = dbn 
              } 
           ) 
       ); 
+1

私はあなたにもupvoted、誰かがこの質問のすべてをdownvotingです。私はこれをタプルよりも好きですが、タプルが最初であり、基本的に私の質問に答えました。 – Derek

+0

匿名型はタプルよりも美しく見えるので、私はアップビートしました。 @Derek; –

+0

;しかし、新しいタプルの構文はより明確です(IMHO): '.Select(dbn =>(sn、dbn))' –

3

SelectManyの別のオーバーロードを使用することをお勧め。他の答えは、各サーバー名に対して新しい列挙型/列挙型/代理人を割り当てる必要がありますが、これはそうではありません。相当

sqlServerNames.SelectMany(serverName => GetDatabases(serverName), 
          (serverName, databaseName) => new 
          { 
           ServerName = serverName, 
           DatabaseName = databaseName 
          }); 

from serverName in sqlServerNames 
from databaseName in GetDatabases(serverName) 
select new 
{ 
    ServerName = serverName, 
    DatabaseName = databaseName 
}; 
関連する問題