C# 如何将同一IQueryable中的不同行分组

C# 如何将同一IQueryable中的不同行分组,c#,iqueryable,C#,Iqueryable,我有一个IQueryable,其中包含应用程序中的使用情况数据列表。表中的每一行都是一个单独的条目。结构是这样的 { 使用数据 用户名(字符串) 会话ID(字符串) PartOfAppAccessed (键(int),名称(字符串),说明(字符串)时间(日期时间))) 但在显示这些数据时,我想根据会话Id对行进行分组。所以我的输出必须在这个结构中 { 使用数据 用户名(字符串) 会话ID(字符串) 时间(日期时间) PartOfAppAccessed (键(int),名称(string),描述(

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

{

使用数据
用户名(字符串)
会话ID(字符串)
PartOfAppAccessed

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

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

{

使用数据
用户名(字符串)
会话ID(字符串)
时间(日期时间)
PartOfAppAccessed

键(int),
名称(string),
描述(string)
时间(DateTime)


键(int),
名称(string),
描述(string)
时间(DateTime)


键(int),
名称(string),
描述(string)
时间(DateTime)

}


因此,我的问题是-如何根据某些条件(如本例中的common sessionId)对同一iQuery表中的不同行进行分组?

我想您希望根据它们的
sessionId
用户名
来使用
实例。守则:

IQueryable<UsageData> usageData = ... ;
var groupedUsageData = usageData.GroupBy(x => new { x.SessionId, x.Username });
IQueryable 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);
var singleGroup=groupedUsageData.ElementAt(0);
字符串sessionId=singleGroup.Key.sessionId;
字符串名称=singleGroup.Key.name;
IEnumerable accessedAppsNames=singleGroup.Select(x=>x.PartOfAppAccessed.Name);
我想到了几个注意事项:

  • 由于您可以直接将会话映射到用户,因此可能不需要在
    UsageData
    对象中同时存储
    SessionId
    Username
    。也许最好只存储
    SessionId
    ,然后从其他表中获取用户名
  • 分组的
    UsageData
    包含
    Time
    属性没有意义。它有什么价值?在原始对象中(分组发生之前),
    Time
    属性仅在
    PartOfAppAccessed
    对象上声明
俱乐部行?你的意思是将他们分组(俱乐部作为一个组)还是过滤他们(俱乐部作为一根棍子来击倒一些人)?俱乐部在数据处理中不是一个很常见的术语。你想加入他们,对他们进行分组,订购吗?@DannyVarod-第一个,和分组一样的俱乐部。@MareInfinitus-我的意思是根据列中的公共值对他们进行分组..也许单组/选择部分不起作用。至少在我的示例中,singleGroup似乎没有PartOfAppAccess成员/属性。