[英]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的不同行分组?
我想您要根据其SessionId
和UserName
对UsageData
实例进行分组 。 编码:
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);
我想到了一些注意事项:
SessionId
和Username
都存储在UsageData
对象中。 也许最好只存储SessionId
并从其他表中获取用户名? UsageData
包含Time
属性是没有意义的。 它会有什么价值? 在原始对象中(在进行分组之前),仅在PartOfAppAccessed
对象上声明Time
属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.