我有一个IQueryable,其中包含我的应用程序中的使用数据列表。其中的每一行都是表中的单独条目。结构就像这样
{
用户名(字符串)
SessionId(字符串)
PartOfAppAccessed
(
键(int),
名称(字符串),
描述(字符串)
时间(日期时间)
)
}
但是在显示这些数据时,我想根据会话ID对行进行分组。所以我的输出必须在这个结构中
{
用户名(字符串)
SessionId(字符串)
时间(日期时间)
PartOfAppAccessed
(
键(int),
名称(字符串),
描述(字符串)
时间(日期时间)
),
(
键(int),
名称(字符串),
描述(字符串)
时间(日期时间)
),
(
键(int),
名称(字符串),
描述(字符串)
时间(日期时间)
)
}
所以我的问题是 - 如何基于某些条件(例如在这种情况下常见的sessionId)对来自同一IQueryable的不同行进行分组?
答案 0 :(得分:1)
我想您希望基于UsageData
和SessionId
UserName
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
并从其他表中获取用户名?Time
包含PartOfAppAccessed
属性没有意义。它有什么价值?在原始对象中(在进行分组之前),{{1}}属性仅在{{1}}对象上声明。