0

次のような使用ログから行を返す SQL クエリがあります。

ActionID    ActionType      ActionDetail    ActionDetailValue
1           SEARCH          Query           jones
1           SEARCH          ResultCount     156
2           DOCUMENT_VIEW   Title           All About Mister Jones
2           DOCUMENT_VIEW   DocumentID      EKDJF34

つまり、ユーザーが実行する各アクションには、実行されたアクションに関するさまざまな詳細を含む複数の行が含まれる場合があります。現時点では、これは C# で次のように表されます。

IEnumerable<ActionItem>

public class ActionItem
{
    public int ActionID { get; set; }
    public string ActionType { get; set; }
    public string ActionDetail { get; set; }
    public string Value { get; set; }
}

どういうわけか、同じ ID とタイプの行を組み合わせる必要があります。最終的には、次の行に沿って JSON オブジェクトを返したいと思います。

var trailItems = {"trailitems": [
    {"ActionID": "1", "ActionType": "SEARCH", "Query": "jones", "ResultCount" : "156"},
    {"ActionID": "2", "ActionType": "DOCUMENT_VIEW", "Title": "All About Mister Jones", "DocumentID" : "EKDJF34"}
]};

LINQの仕事のようですか?

4

1 に答える 1

0

Json部分はあまり開発しませんが、十分なデータ構造があれば扱えると思います。これを試すことができます:

var grouped = 
    from a in actions
    group a by new { a.ActionID, a.ActionType } 
    into g
    select new 
    { 
        g.Key.ActionID, 
        g.Key.ActionType, 
        Values = 
            (from x in g
             select new KeyValuePair<string, string>(x.ActionDetail, x.Value))
            .ToDictionary()
    };

これ以上処理せずにこれから json を構築しようとすると、次のような結果が得られます。

[
    {"ActionID":1,"ActionType":"SEARCH","Values":{"Query":"jones","ResultCount":"156"}},
    {"ActionID":2,"ActionType":"DOCUMENT_VIEW","Values":{"Title":"All About Mister Jones","DocumentID":"EKDJF34"}}
]

これはまさにあなたが探しているものではありませんが、かなり近いものであり、「キー」を値から分離するため、処理する方が良いかもしれません.

于 2012-09-10T12:17:26.930 に答える