0

アプリケーションの使用状況データのリストを含むIQueryableがあります。その中の各行は、テーブル内の個別のエントリです。構造はこんな感じ

{{

使用状況データ

ユーザー名(文字列)
SessionId(文字列)
PartOfAppAccessed

キー(int)、
名前(文字列)、
説明(文字列)
時間(DateTime)

}

しかし、このデータを表示している間、セッション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ます。おそらく、他のテーブルからのみ保存してユーザーの名前を取得する方がよいでしょうか。UsernameUsageDataSessionId
  • グループ化してプロパティUsageDataを含めることは意味がありません。Timeそれにはどのような価値がありますか?元のオブジェクト(グループ化が行われる前)では、TimeプロパティはPartOfAppAccessedオブジェクトに対してのみ宣言されます。
于 2012-07-02T20:07:30.400 に答える