Как обратиться к полю в динамическом запросе linq?

У меня есть запрос, который должен быть динамическим, я думаю, что большая часть моего синтаксиса верна, но я не знаю, как дать ему имя столбца, по которому я хочу сгруппировать. Я пробовал несколько разных подходов, и я всегда получаю сообщение об ошибке: «Нет свойства или поля« имя »не существует в типе« datarow »

IQueryable<Result> aggregate1 = 
      query1Data.Tables[0].AsEnumerable().AsQueryable()
                .GroupBy("name", "it")
                .Select<Result>("new(Key as Group, Sum(value)as Total)");

Я предполагаю, что мне нужно использовать что-то вроде Field<string>("name"), но я не могу понять это. Я видел проблему на нескольких форумах, но ни у кого нет четкого ответа, как обойти эту проблему.


person Ronan    schedule 12.08.2010    source источник


Ответы (2)


Это то, что вы пытались сделать?

var aggregate1 =
        query1Data.Tables[0].AsEnumerable().AsQueryable()
            .GroupBy(row => row.Field<string>("name"), row => row.Field<int>("it"))
            .Select(g => new { Group = g.Key, Total = g.Sum() });
person Jeff Mercado    schedule 12.08.2010

Я не уверен, что точно понимаю, чего вы хотите, но вот небольшой фрагмент кода, который вы можете использовать в качестве вдохновения:

var dataTable = new DataTable();
dataTable.Columns.Add("Name", typeof(String));
dataTable.Columns.Add("Value", typeof(Int32));
dataTable.Rows.Add("A", 1);
dataTable.Rows.Add("A", 2);
dataTable.Rows.Add("B", 3);
dataTable.Rows.Add("B", 4);

var aggregate = dataTable.AsEnumerable()
  .GroupBy(row => row.Field<String>("Name"), row => dataRow.Field<Int32>("Value"))
  .Select(group => new { Name = group.Key, Total = group.Sum() });

foreach (var row in aggregate)
  Console.WriteLine(row.Name + " = " + row.Total);
person Martin Liversage    schedule 12.08.2010