2011-06-22 7 views
1

LinqPadとEntity Framework 4モデルおよびMS SQL 2008データベースを使用しています。Linq toすべての外部エンティティと1つのエンティティまたは関連付けられていないエンティティを返す

Customer.CustomerIDへの外部キーを使用してPurchaseへの関連付けを持つCustomerエンティティがあるとします。

ObjectQuery<Customer>は、PurchasesアソシエートEntityCollection<Purchase>です。

from c in Customers.Include("Purchases") 
select c 

今、私は唯一の最も最近の購入ですべての顧客を取得したいです。購入がない場合はPurchasesコレクションを空にします。

私は次のようなものが必要ですが、エンティティと関連付けを維持しています。私はすべてコレクションを購入した顧客を0または1に限定購入したい。私のサービスで

from c in Customers 
from p in c.Purchases.Where(p => p.PurchaseDate == c.Purchases.Max(m => m.PurchaseDate).DefaultIfEmpty() 
select new { CustomerID = c.CustomerID, PurchaseID = (int?)p.PurchaseID } 

私はList<Customer>を返すので、私は、私はLINQクエリからの復帰にCustomerエンティティとPurchases関連を維持する必要があると思います。

利用の場合:あなたの洞察力のための

var customers = CustomerService.GetCustomersAndMostRecentOrder(); 
foreach (Customer c in customers) { 
    Console.WriteLine(c.Lastname + ":" + 
        c.Purchases.Count() == 0 ? "None" : c.Purchases[0].PurchaseOrder); 
} 

感謝。

答えて

0

あなたは、LINQ-エンティティ-へとLINQツーオブジェクトそうなどとの残りの部分よりも、とクエリの一部を実行する必要があります。

var query = (from c in Customers 
      select new 
      { 
       Customer = c, 
       Purchase = c.Purchases.OrderByDescending(p => p.PurchaseDate).FirstOrDefault() 
      }) 
      .AsEnumerable() 
      .Select(c => new Customer() 
         { 
          CustomerID = c.CustomerID, 
          CustomerProperty2 = c.CustomerProperty2, 
          CustomerProperty3 = c.CustomerProperty3, 
          ..., 
          Purchases = new Purchase[] { c.Purchase } 
         } 
        ); 
+0

私はこれを試してみましたが、出力に0購入を取得しています。 - 'Purchases = c.Purchases'に 'as EntityCollection 'を追加しました – GoClimbColorado

+0

Take(1)をFirstOrDefault()に変更してみてください – Aducci

+0

いいえ、購入のコレクションではなくPurchaseのインスタンスに変更します。また、DefaultIfEmpty()を試してみました... 0購入を得る。 – GoClimbColorado

関連する問題