使用动态属性进行分组并选择

时间:2019-07-05 10:24:32

标签: c# linq

让我开始提问,告诉我,我已经进行了大量搜索以找到解决方案,事实上,我已经设法完成了最后一步,但是现在我完全坚持了。

基本上,我确实希望基于某些属性(除非在运行时中才知道)和一些其他操作(例如GroupBySum,..)执行Average。 。在其他属性中(除非在运行时中,否则我也不知道)。
因此,以错误的方式编写,我想执行以下操作:

var data = ...;
var propertyToGroup = new List<string>() { "prop1", "prop2" };
var propertyToOperate = new List<string>() { "prop3Count" };

var group = propertyToGroup.GroupBy(p => new { p[propertyToGroup[0]], p[propertyToGroup[1]], ... });
var select = group.Select(g => new {
  prop1 = g.Key.prop1,
  prop2 = g.Key.prop2,
  prop3Count= g.Select(s => s.prop3Count).Count())
});

因此,最后,我将在prop1prop2上分组,并且prop3Count将具有相同的prop1和{{ 1}}。

现在,我到目前为止已经完成了什么?我已经成功创建了用于创建prop2变量的函数!我还设法创建了group所在的其他memberAssignment,但是我完全想念如何通过创建的prop1 = g.Key.prop1执行Select
为了更好地理解,我创建了这个示例-> https://dotnetfiddle.net/RjY4BO

因此,如您所见,在memberAssignment中,我设法创建了CreateObject memberAssignmentBrand = o.Key.Car.Brand。仅错过执行计数的开关,但这不是问题。
问题是我不知道如何使用Model = o.Key.Car.Model返回那些memberAssignment

现在,new {...}返回对象,但是我想做的事情是这样的:
CreateObject
这样我就可以得到回报: return = new { foreach(a in bindings) }

我正确解释了自己吗?希望如此。并希望您能为我提供帮助:正如我所说,我在SO上还有很多其他问题,因此,我创建了GroupBy(Grouping by multiple keys known at runtime), new { Brand = o.Key.Car.Brand, Model = o.Key.Car.Model }函数(LINQ : Dynamic select),但现在我迷失了:(

编辑:在该示例中,我使用两个列表来了解CreateObjectpropertyToGroup:这只是一种简化;在实际的应用程序中,我将从我的rawData中检索这些列表,同样,我也不知道前面的那些属性。

0 个答案:

没有答案