Я использую LinqPad с моделью Entity Framework 4 и базой данных MS SQL 2008.
Предположим, у нас есть объект Customer, который связан с Purchase с помощью внешнего ключа для Customer.CustomerID.
Следующий linq создает ассоциацию 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>
, поэтому я думаю, что мне нужно поддерживать сущность Customer
и ассоциацию Purchases
в возврате запроса linq.
Вариант использования:
var customers = CustomerService.GetCustomersAndMostRecentOrder();
foreach (Customer c in customers) {
Console.WriteLine(c.Lastname + ":" +
c.Purchases.Count() == 0 ? "None" : c.Purchases[0].PurchaseOrder);
}
Спасибо за ваше понимание.