Я использую LinqPad с моделью Entity Framework 4 и базой данных MS SQL 2008.
Предположим, у нас есть объект «Клиент», который связан с «Покупкой» с внешним ключом для 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);
}
Спасибо за понимание.