2014-06-26 2 views
-2

searchList.GroupBy (s =>множественной группа столбцов по и сумме только две колонки

new { 
    s.ClientRef, 
    s.ClientName, 
    s.Option, s.WineID, s.Producer, 
    s.Brand, s.Variety, s.Format, s.Vintage, 
    s.MaturityTo, s.RPS, s.TradeDate, s.Target, s.AuctionRequested, 
    s.UKUpdated, s.GlobalUpdated }) 

.Select(y => new { ClientRef = y.Key.ClientRef, 

y.Key.ClientName, y.Key.Option, y.Key.WineID, 
y.Key.Producer, y.Key.Brand, y.Key.Variety, y.Key.Format, y.Key.Vintage, 
y.Key.MaturityTo, y.Key.RPS, y.Key.TradeDate, y.Key.Target, 
y.Key.AuctionRequested, y.Key.UKUpdated, y.Key.GlobalUpdated, 

TotalBottles = y.Sum(z => z.Bottles), 

TotalUnitPrice = y.Sum(z => z.Unit) }).ToList(); 

Привет выше мой фактический запрос выглядеть. , но я хочу, чтобы эти группы по ключевым столбцам прийти из строки [ ] перевалы, а затем исправить. столбцы может быть 3,4 или любое число до 18 и будет подводить итоги в ходе группы по процессу.

поэтому я хочу searchList.GroupBy (ы => cols.split (» , ')) .select (new {cols.split (', '), TotalUnit = s.sum (z => z.Unit), TotalBottles = s.sum (z => z.Bottles)}). ToList();

+0

Пожалуйста, отформатируйте свой код так, чтобы он был доступен для людей. – Mike

+0

Спасибо Михал. Я изменил его. – user3778502

+0

* Все * код должен быть включен в кодовый блок. Не только выглядеть лучше, но и лучше читать. Входит ли вторая строка в код? – Mike

ответ

0

Шаг 1: Загрузите пакет System.Linq.Dynamic или используйте nuget, чтобы добавить его в свой проект.

Шаг 2: попытайтесь понять код и использовать его.

   string[] finalColumnList = finalGroupByCols.ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);      
       StringBuilder sb = new StringBuilder(); 
       int counter = 0; 
       char com = ','; 
       sb.Append("new ("); 
       foreach (string colName in finalColumnList) 
       { 
        string right = colName; 
        string left = colName; 
        if (left == "WineID") 
        { 
         sb.Append("Convert.ToInt32(").Append("it[\"").Append(left).Append("\"]).ToString() as "); 

        } 
        else if (left == "Format" || left == "Vintage" || left == "Bottles" || left == "MaturityTo") 
        { 
         sb.Append("Convert.ToDouble(").Append("it[\"").Append(left).Append("\"]) as "); 

        } 
        else 
        { 
         sb.Append("it[\"").Append(left).Append("\"] as "); 
        } 

        counter++; 
        if (counter == finalColumnList.Length) 
         com = ' '; 
        sb.Append(right).Append(com); 
       } 
       sb.Append(")"); 

       var SQLval = CommonLib.DataConverter.ListToDataTableConverter(searchList).AsEnumerable().AsQueryable().GroupBy(sb.ToString(), "it") 
         .Select("new (Sum(Convert.ToDouble(it[\"Bottles\"].ToString())) as TotalBottles, Sum(Convert.ToDouble(it[\"Unit\"].ToString())) as TotalUnit,it.key)").Cast<object>().ToList(); ; 
Смежные вопросы