Проблема Linq GroupBy

Мне нужно сгруппировать данные, содержащиеся в списке, но я не могу жестко запрограммировать предложение groupBy, поскольку оно может быть определено пользователем.

Пример, показанный ниже, отлично работает с жестко запрограммированным «r.DeviceID» в операторе GroupBy. Что я хотел бы сделать, так это изменить это так, чтобы конечный пользователь мог выбрать поле, к которому будет применяться выражение. На данный момент пользователь может выбрать «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 : "";
} 
1
задан Retrocoder 27 August 2010 в 15:24
поделиться

2 ответа

Отражение?

r => extractText(r.GetType().GetProperty("DeviceId").GetValue(r, null), "TEST01-.")
1
ответ дан 2 September 2019 в 21:45
поделиться
1
ответ дан 2 September 2019 в 21:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: