2010-05-18 3 views
2

Я смотрел несколько примеров на сайте microsoft о linq, и я вижу пример, который мне нужно изменить!SelectMany в Linq для объекта

http://msdn.microsoft.com/en-us/vcsharp/aa336758.aspx#SelectManyCompoundfrom3

public void Linq16() 
{ 
List<Customer> customers = GetCustomerList(); 

var orders = 
    from c in customers 
    from o in c.Orders 
    where o.OrderDate >= new DateTime(1998, 1, 1) 
    select new { c.CustomerID, o.OrderID, o.OrderDate }; 

ObjectDumper.Write(orders); 
} 

Insted того, что избранная retrives в КодКлиенте, OrderID и OrderDate Я хочу, чтобы выбрать КодКлиент и System.Collection.Generic.List<int>, который содержит все заказы для этого пользователя! По сути, я хочу сгруппировать свои заказы с помощью CustomerID, но я заметил, что linq для объекта не разрешает .ToList(object) внутри select.

Я хочу что-то вроде этого ...

List<Customer> customers = GetCustomerList(); 

var orders = 
    from c in customers 
    from o in c.Orders 
    where o.OrderDate >= new DateTime(1998, 1, 1) 
    select new xpto 
    { 
     TheCostumerID = c.CustomerID, 
     CostumerOrders = o.Select(i=>i.OrderID).ToList(), 
    }; 

... но .ToList() является большой проблемой, по крайней мере для меня.

Я пытаюсь найти решение для этого, но до сих пор я ничего не выполнил!

Пожалуйста, помогите мне.

+0

чем проблема с «ToList»? –

+0

.ToList() внутри выбора в linq для сущности, похоже, не работает! – Brazeta

ответ

0

У вас была возможность группироваться по статье?

from orders in context.Orders 
group orders by orders.CustomerID into ordersGroup 
select new { CustomerID = ordersGroup.Key, 
       Orders = ordersGroup }; 

Сообщите мне, если это не то, что вы искали.

0

Try:

вар заказов = (от гр в клиентов с о в c.Orders где o.OrderDate> = новый DateTime (1998, 1, 1) выбрать новый xpto { TheCostumerID = c.CustomerID,
CostumerOrders = o.Select (i => i.OrderID) }). ToList();

+0

, но результатом этого запроса является список объектов с int и IEnumerable внутри! Я хочу, чтобы результат был List с int и List внутри! Вы видите мою проблему сейчас? – Brazeta

0

Я нашел более функциональный синтаксис, чтобы быть более кратким, но я бы использовать GroupBy так:

DateTime minDate = new DateTime(1998, 1, 1); 

ordersEntities = entities.Customers.GroupJoin(entities.Orders, // Table to join with 
    customer => customer.Id, order => order.CustomerId, // Properties to match on 
    (customer, orders) => new { 
     Customer = customer, 
     Orders = orders.Where(o => o.Date > minDate) 
    }); 

А затем с помощью ToList(), чтобы выскочить из LINQ к лицам и в LINQ к объектам (с оглядкой на том, как это влияет на реальные запросы SQL собирается к базе данных, конечно):

return ordersEntities.ToList() 
    .Select(oe => new { 
     Customer = oe.Customer, 
     Orders = oe.ToList() 
    }); 

 Смежные вопросы

  • Нет связанных вопросов^_^