2015-10-12 4 views
2

Я пытаюсь создать вложенную группу с динамическим запросом.Динамический запрос linq с вложенными группами

Ниже моя коллекция данных

var invoices = new List <Purchase>() { 
    new Purchase() { 
     Id = 1, Customer = "a", Date = DateTime.Parse("1/1/2009") 
    }, new Purchase() { 
     Id = 2, Customer = "a", Date = DateTime.Parse("1/2/2009") 
    }, new Purchase() { 
     Id = 3, Customer = "a", Date = DateTime.Parse("1/2/2009") 
    }, new Purchase() { 
     Id = 4, Customer = "b", Date = DateTime.Parse("1/1/2009") 
    }, new Purchase() { 
     Id = 5, Customer = "b", Date = DateTime.Parse("1/1/2009") 
    }, new Purchase() { 
     Id = 6, Customer = "b", Date = DateTime.Parse("1/2/2009") 
    } 
}; 

Этот запрос LINQ возвращает желаемый результат.

var tree = invoices.GroupBy(x => x.Date).Select(x => new 
     { 
      Key = x.Key, 
      Items = x.GroupBy(y => y.Customer).Select(y => new 
      { 
       Key = y.Key, 
       Items = y 
      }) 
     }).ToList(); 

Ниже выход выше Linq запрос

Output of linq query result

Но мне просто нужно сгруппировать различные столбцы в другом порядке.

Так что я пытаюсь создать динамический запрос linq. Но результат моего кода не такой же, как мой предыдущий запрос linq.

var groupedInvoiceItems = invoices.AsQueryable().GroupBy("new (Date, Customer)", "it"); 
+0

Каков результат вашего динамического запроса? – ZwoRmi

+0

Что вы подразумеваете под ** динамическим запросом **? Связано ли это с [System.Linq.Dynamic] (https://dynamiclinq.codeplex.com/)? –

+0

Я имею в виду динамический запрос LINQ. проверьте следующую ссылку http://www.c-sharpcorner.com/UploadFile/deveshomar/dynamic-linq-library-in-C-Sharp/ – deadpool

ответ

0

Вы можете сделать это с помощью Generics. Просто перейдите в свою Лямбду к универсальному методу.

Что-то вроде:

private IEnumerable<PurchaseGrp> BuildList<TSource>(IQueryable<TSource> allRecords, 
      Func<TSource, string> selector) 
{ 
    var result = allRecords.GroupBy(x = > x.selector(x)); 
    return result; 
} 

Возвращаемый тип может быть новый тип Сгруппированные PurchaseGrp или же в качестве источника (Purchase).

+0

Вы не должны принимать 'IQueryable', если вы собираетесь рассматривать его как' IEnumerable'. Это не позволит выполнить операцию в базе данных. – Servy

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