0

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

{

使用数据

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

键(int),
名称(字符串),
描述(字符串)
时间(日期时间)

}

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

{

使用数据

Username (string)
SessionId (string)
Time (DateTime)
PartOfAppAccessed
(
Key (int),
Name (string),
Description (string)
Time (DateTime)
),
(
Key (int),
Name (string),
Description (string)
Time (DateTime)
),
(
Key (int),
Name (string),
Description (string)
Time (DateTime)
)
}

所以我的问题是 - 如何根据某些条件(例如本例中的常见 sessionId)对来自同一个 IQueryable 的不同行进行分组?

4

1 回答 1

1

我想您想根据实例对实例进行分组和。编码:UsageDataSessionIdUserName

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对象上声明。
于 2012-07-02T20:07:30.400 回答