-1

私は2つのテーブルを持っていますDatacenterSubnet

Datacenterには主キーがあり、のSubnet外部キー値がありDatacenterIdます。

テーブルごとに異なるリストのような結果が必要DatacenterIdです。Subnet

Id DatacenterId   name      

1       1         kishore    

2       1          ..       

3       1          ..       

4       2          ..        

5       2          ..        

6       2          ..       

私は2つのリストをDatacenterId = 1互いに取得する必要がありますDatacenterId = 2

現在のクエリは期待どおりに機能しておらず、修正方法がわかりません。

var myList = from o in db.EWB_SiteSubNet 
             where edbCenterIdList.Contains(o.DataCenterID) 
             select o; 

クエリが実行されると、myList20 レコードの単一のリストが含まれます。DatacenterId必要なのは、テーブル内の一意の値ごとに 1 つの 2 つのリストです。たとえば、Subnetテーブルに 4 つの一意のDatacenterId値がある場合、クエリの出力は 4 つの個別のリストである必要があります。

4

1 に答える 1

5

1 つのクエリから複数のコレクションを取得することはできません。これは、すべての種類の LINQ (オブジェクト、SQL、およびエンティティ) の基本的なルールにすぎません。IEnumerable<T>戻り値は、クエリと LINQ のフレーバーに応じて、常に変化します。

ただし、クエリでは、オブジェクトをグループ化してコレクションのコレクションを返すことができるため、ここで採用する必要があるアプローチです。

したがって、元のクエリは機能します。

var myList = from o in db.EWB_SiteSubNet 
             where edbCenterIdList.Contains(o.DataCenterID) 
             select o; 

しかし、それはSubNet既存のDataCenterID.

でグループ化されたレコードDataCenterIDが必要なので、GroupByを実行する必要があります。

var myList = from o in db.EWB_SiteSubNet 
             where edbCenterIdList.Contains(o.DataCenterID) 
             group o by o.DatacenterId into g
             select g.Select(r => r.ToList());

myListリストのコレクション (IEnumerable<List<T>>この場合) になり、反復しmyListてその中の個々のリストを取得できます。または、クエリを少し工夫してディクショナリを作成することもできます ( ToDictionary()onを使用しmyListて、キー値 (DataCenterID など) で個々のコレクションにアクセスできるようにします)。

于 2013-09-29T11:40:34.457 に答える