【问题标题】:How to group different rows from same IQueryable如何对来自同一 IQueryable 的不同行进行分组
【发布时间】:2012-07-02 19:45:58
【问题描述】:

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

{

使用数据

用户名(字符串)
会话 ID(字符串)
PartOfAppAccessed
(
Key (int),
Name (string),
Description (string)
时间 (DateTime)
)
}

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

{

使用数据

用户名(字符串)
会话 ID(字符串)
时间(日期时间)
PartOfAppAccessed
(
Key (int),
Name (string),
Description (string)
时间 (DateTime)
),
(
Key (int),
名称(字符串)、
描述(字符串)
时间(日期时间)
)、
(
键(整数)、
名称(字符串)、
描述(字符串)
时间(日期时间)
)
}

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

【问题讨论】:

  • 俱乐部行?您是指将它们分组(club as in group)还是过滤它们(club as in a stick for knocking some)?
  • club 在数据处理中并不是一个很常见的术语。你想加入他们、分组他们、订购他们吗?
  • @DannyVarod - 第一个,俱乐部和他们一样。
  • @MareInfinitus - 我的意思是根据列中的共同值对它们进行分组..

标签: c# iqueryable


【解决方案1】:

我想你想group 你的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);

想到的一些注意事项:

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

【讨论】:

  • 也许 singleGroup / Select 部分不起作用。至少在我的示例中,singleGroup 似乎没有 PartOfAppAccess 成员/属性。
猜你喜欢
  • 2011-03-12
  • 1970-01-01
  • 2019-01-15
  • 1970-01-01
  • 2019-04-09
  • 2021-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多