2009-06-01 8 views
0

を取得するためにLINQを使用する:どのようにここに起動する子コレクション

public class Customer 
{ 
    public int CustomerID { get; set; } 
    public string CustomerName { get; set; } 
    public IList<Order> Orders { get; set; } 
} 

public class Order 
{ 
    public int OrderID { get; set; } 
    public int CustomerID { get; set; } 
} 

あなたはすべての顧客からのすべての注文を取得するために書くLINQクエリでしょうか?効果に

何か:

IList<Order> orders = new List<Order>(); 
foreach (Customer c in Customers) 
{ 
    orders.Union(c.Orders); 
} 

は、私は次のことを試してみましたが、例外で、「NHibernateはコレクションは関連はなかった」スロー:

var orders = from c in Customers 
      select c.Orders; 

私は何かが欠けています知っています、私はlinqでこれを達成する方法を見つけることができません。

答えて

2
var orders = from c in db.Customers 
    from o in c.Orders 
    select o; 

それとも

var orders = db.Customers.SelectMany(c => c.Orders); 

それはNHibernateのためにLINQで動作しますか?知りません。

+0

私もこれを試しましたが、まだエラーが発生しています:コレクションは関連ではありません:注文。 –

+1

nhibernateが顧客と注文の関連を認識していることを確認してください。私は、どこかに改ざんを必要とするxmlファイルがあると確信しています。 –

+0

私はこれまでのところ成功していないnhibernate xmlマッピングファイルを試してみました。私は顧客オブジェクトにエンティティを使用しており、オーダーにはコレクションエンティティを使用しています。関係(キー、1対多、外部キー、複合要素など)を設定するためには、さまざまな方法やものがありますが、いくつかは連携していますが、他のものはそうではありません。これを一つ取り出してください。これまでの助けてくれてありがとう。 –

0

外部キー制約が[Order]。[CustomerID]から[Customer]。[ID]に正しく設定されていることを確認してください。

+0

データベース内でforeighキーの関連付けが正しく設定されています。私が最初の質問で書いたループ構造を使用すると、すべて正常に動作します。 –

関連する問題