2012-06-09 5 views
4

для целей отчетности я хочу разбить список заказов на покупку в несколько списков. Один список для каждого адреса покупки. Я знаю, что можно группировать список по адресу покупки, но мой вопрос заключается в том, как разделить список по этому адресу покупки на несколько списков и использовать эти несколько списков для создания отдельных файлов отчетов.Разделение списка Linq по группам

код:

(from o in orders 
group o by new {field1, field2, field3, field4} into og 
orderby og.Key.field1 
select new ViewClass 
{ 
    purchaseAddress = og.Key.field1, 
    product = og.key.field2, 
    count = og.count 
}).ToList() 

вопрос: как разделить выше список на несколько списков для каждого purchaseAddress?

+0

Я думаю, что ваш вопрос больше связан с представлением данных. как это должно быть нанесено на экран. Это? –

+0

да это на презентации, но в моем случае в файле отчета (rdlc). Для каждого адреса покупки я хочу создать конкретный файл PDF. файл отчета в данный момент создается со всеми адресами на отдельной странице. Этот файл должен быть разделен на несколько файлов, которые могут быть отправлены по электронной почте по каждому адресу. –

+0

. Вы создаете единый PDF-файл для всех данных, необходимых для добавления разрыва страницы на адрес покупки в поле группы. –

ответ

10

Есть встроенная функция, которая, как я думаю, делает то, что вы хотите. Если я предполагаю, что ваш код присваивается переменной с именем query, то вы можете написать это:

ILookup<string, ViewClass> queryLists = query.ToLookup(x => x.purchaseAddress); 

Это по существу создает список списков, которые обращаются как словарь, за исключением того, что каждое значение представляет собой список из нуля или больше значений. Что-то вроде:

IEnumerable<ViewClass> someList = queryLists["Some Address"]; 
+1

Не зная, сколько адресов доступны, я использовал: foreach (список var в списках запросов) {dosomething (querylist [list.Key]);} –

2

Просто превратите каждую группу в список.

select new ViewClass 
{ 
    purchaseAddress = og.Key.field1, 
    product = og.key.field2, 
    count = og.count, 
    List = og.ToList() 
}).ToList(); 

О, ваша группировка является одним из способов для сущностей и другой способ для страниц ... просто перегруппировать.

List<ViewClass> classes = (
    from o in orders 
    group o by new {field1, field2, field3, field4} into og 
    orderby og.Key.field1 
    select new ViewClass 
    { 
    purchaseAddress = og.Key.field1, 
    product = og.key.field2, 
    count = og.count 
    }).ToList(); 

List<List<ViewClass>> regrouped = (
    from c in classes 
    group c by c.purchaseAddress into g 
    select g.ToList() 
).ToList(); 
0

Другой простой встроенной функцией, которую вы можете использовать, является функция GroupBy. Это делает подобную работу как ToLookup, но это означает, что ваш новый список IQuerable, а не как словарь и несколько других вещей (см это article для хорошего пробоя)

var newList = orders.GroupBy(x => x.field1); 

Это будет возвращать список списков сгруппированные по указанным вами полям.

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