2010-08-12 1 views
0

J'ai une requête qui doit être dynamique, je pense que la plupart de ma syntaxe est correcte mais je ne sais pas comment lui donner le nom de la colonne que je veux regrouper. Je l'ai essayé quelques approches différentes et je reçois toujours une erreur - « Pas de propriété ou un champ « nom » existe dans le type « datarow »Comment faire référence à un champ dans une requête linq dynamique?

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

Je suppose que je dois utiliser quelque chose comme Field<string>("name") mais je ne peux pas le comprendre . Je l'ai vu le problème sur quelques forums, mais personne ne semble avoir une réponse claire comment contourner le problème.

Répondre

0

Est-ce que vous essayez de faire?

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() }); 
0

Je ne suis pas Bien sûr, je comprends exactement ce que vous voulez, mais voici un petit extrait de code que vous pouvez utiliser comme inspiration:

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); 
Questions connexes