1

データベースに 2 つのテーブルがあります

  1. サーバー テーブル - サーバー ID (文字列データ型) のリストが含まれています。サーバー ID はプライマリ キーです。
  2. コンポーネント テーブル - コンポーネント名のリストが含まれます。ServerID は外部キーです。

次のクエリ

var query2 = (from a in this.db.Servers
             join b in this.db.Components
             on a.ServerID equals b.ServerID                        
             select new { a.ServerID, b.Name }).AsEnumerable().Select(x => string.Format("{0}---{1} ",x.ServerID, x.Name)).ToArray();

string[] header = query2;

header[] は次の結果になります

Server X component 1x
Server X component 2x
Server X component 3x
Server Y component 1y
Server Y component 2y
Server Y component 3y
Server Z component 1z
Server Z component 2z
Server Z component 3z

しかし、次のように結果を表示したいと思います

Server X
component 1x
component 2x
component 3x
Server Y
component 1y
component 2y
component 3y
Server Z
component 1z
component 2z
component 3z

これは、個別の ServerID のみを 1 回取得し、その後に対応するコンポーネントを取得することを意味します。これを実行するために、2 つのクエリを作成してみました。最初のクエリは個別の ServerID のみを返し、2 番目のクエリは上記のクエリとしてループして照合します。しかし、うまくいきませんでした。親切に助けて

4

3 に答える 3

2

でグループ化し、ServerIDa を使用しSelectManyて各 ID をコンポーネントのリストと連結します。

var query2 = (from a in this.db.Servers
             join b in this.db.Components
             on a.ServerID equals b.ServerID                        
             select new { a.ServerID, b.Name })
             .AsEnumerable()
             .GroupBy(a => a.ServerID)
             .SelectMany(g => (new [] {g.Key}).Concat(g.Select(i=>i.Name)));

string[] header = query2.ToArray();

または、サーバー上でグループ化を行いたい場合:

var query2 = (from a in this.db.Servers
             join b in this.db.Components
             on a.ServerID equals b.ServerID  into g
             select new { 
                a.ServerID, 
                Components = g.Select(x => x.Name) 
             })
             .AsEnumerable()
             .SelectMany(g => (new [] {g.ServerID}).Concat(g.Components));
于 2013-06-14T14:55:46.660 に答える
1

ServerID をキーとして指定する GroupBy LINQ 演算子を使用できます。結果は、IGroupingServerID ごとに 1 つずつオブジェクトのセットになり、それぞれにその ServerID のレコードのリストが含まれます。

試す:

from a in this.db.Servers
join b in this.db.Components
on a.ServerID equals b.ServerID                        
group b.Name by a.ServerID
于 2013-06-14T14:50:58.817 に答える