C# Linq群问题

C# Linq群问题,c#,linq,group-by,C#,Linq,Group By,我需要对列表中的数据进行分组,但不能硬编码groupBy子句,因为它可能由用户定义 下面所示的示例适用于GroupBy语句中硬编码的“r.DeviceID”。我想做的是更改它,以便最终用户可以选择将应用表达式的字段。此时,用户可以从下拉列表中选择“DeviceId”。是否可以修改代码,以便列表中的文本“DeviceId”可以用于下面所示的示例中(例如替换r.DeviceId位)。这只是一个简化的示例,但“真实”版本有许多字段,用户可能希望对其中的任何字段进行分组。请注意,“TEST01-”也将替

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

下面所示的示例适用于GroupBy语句中硬编码的“r.DeviceID”。我想做的是更改它,以便最终用户可以选择将应用表达式的字段。此时,用户可以从下拉列表中选择“DeviceId”。是否可以修改代码,以便列表中的文本“DeviceId”可以用于下面所示的示例中(例如替换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 : "";
} 
列表事务=新列表();
添加(新的第三方ExportTransaction{DeviceId=“TEST01-1”,单位=1});
添加(新的第三方ExportTransaction{DeviceId=“TEST01-2”,单位=2});
添加(新的第三方ExportTransaction{DeviceId=“TEST01-2”,单位=3});
添加(新的第三方ExportTransaction{DeviceId=“TEST01-1”,单位=4});
添加(新的第三方ExportTransaction{DeviceId=“TEST01-1”,单位=5});
添加(新的第三方ExportTransaction{DeviceId=“TEST01-2”,单位=6});
var s=transactions.GroupBy(r=>extractText(r.DeviceId,“TEST01-.”);//我们需要改变这个
//此时,s现在保存分组列表
私有静态字符串extractText(字符串字段文本,字符串regExp)
{
Match m=Regex.Match(fieldText,regExp);
返回m.成功?m.值:“”;
} 
反射

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

可以通过编程方式编写lambda表达式:


好吧,这就是速记。您可以缓存PropertyInfo对象:PropertyInfo prop=typeof(ThirdPartyExportTransaction).GetProperty(“DeviceId”);