繁体   English   中英

如何将来自同一IQueryable的不同行分组

[英]How to group different rows from same IQueryable

我有一个IQueryable,其中包含应用程序中使用情况数据的列表。 表中的每一行都是一个单独的条目。 结构是这样的

{

使用数据

用户名(字符串)
SessionId(字符串)
PartOfAppAccessed

键(int),
名称(字符串),
说明(字符串)
时间(DateTime)

}

但是在显示此数据时,我想根据会话ID对行进行分组。 所以我的输出必须是这种结构

{

使用数据

用户名(字符串)
SessionId(字符串)
时间(DateTime)
PartOfAppAccessed

键(int),
名称(字符串),
说明(字符串)
时间(DateTime)
),

键(int),
名称(字符串),
说明(字符串)
时间(DateTime)
),

键(int),
名称(字符串),
说明(字符串)
时间(DateTime)

}

所以我的问题是-如何根据某种条件(例如,在这种情况下为通用sessionId)将来自同一IQueryable的不同行分组?

我想您要根据其SessionIdUserNameUsageData实例进行分组 编码:

IQueryable<UsageData> usageData = ... ;
var groupedUsageData = usageData.GroupBy(x => new { x.SessionId, x.Username });

然后,您可以像下面这样使用单个组:

var singleGroup = groupedUsageData.ElementAt(0);
string sessionId = singleGroup.Key.SessionId;
string name = singleGroup.Key.Name;

IEnumerable<string> accessedAppsNames = singleGroup.Select(x => x.PartOfAppAccessed.Name);

我想到了一些注意事项:

  • 由于您可能可以直接将会话映射到用户,因此可能没有必要将SessionIdUsername都存储在UsageData对象中。 也许最好只存储SessionId并从其他表中获取用户名?
  • 分组的UsageData包含Time属性是没有意义的。 它会有什么价值? 在原始对象中(在进行分组之前),仅在PartOfAppAccessed对象上声明Time属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM