Linq GroupBy问题

时间:2010-08-27 15:24:51

标签: c# linq group-by

我需要对列表中保存的数据进行分组,但不能对groupBy子句进行硬编码,因为用户可以对其进行定义。

下面显示的示例适用于GroupBy语句中的硬编码“r.DeviceID”。我想要做的是更改它,以便最终用户可以选择表达式将应用于的字段。用户可以从下拉列表中选择“DeviceId”。是否可以修改代码,以便列表中的文本“DeviceId”可以在下面显示的示例中使用(EG替换r.DeviceID位)。这只是一个减少的示例,但“真实”版本有许多字段,用户可能想要分组。请注意,“TEST01-。”也将替换为用户定义的正则表达式。

List<ThirdPartyExportTransaction> transactions = new List<ThirdPartyExportTransaction>();
transactions.Add(new ThirdPartyExportTransaction { DeviceId = "TEST01-1", Unit = 1 });
transactions.Add(new ThirdPartyExportTransaction { DeviceId = "TEST01-2", Unit = 2 });
transactions.Add(new ThirdPartyExportTransaction { DeviceId = "TEST01-2", Unit = 3 });
transactions.Add(new ThirdPartyExportTransaction { DeviceId = "TEST01-1", Unit = 4 });
transactions.Add(new ThirdPartyExportTransaction { DeviceId = "TEST01-1", Unit = 5 });
transactions.Add(new ThirdPartyExportTransaction { DeviceId = "TEST01-2", Unit = 6 });


var s= transactions.GroupBy(r => extractText(r.DeviceId, "TEST01-.")); // Need to change this

// At this point s now holds the grouped list

private static string extractText(string fieldText, string regExp)
{
   Match m = Regex.Match(fieldText, regExp);

   return m.Success ? m.Value : "";
} 

2 个答案:

答案 0 :(得分:1)

反射?

r => extractText(r.GetType().GetProperty("DeviceId").GetValue(r, null), "TEST01-.")

答案 1 :(得分:1)