C# 将多行合并到对象属性中

C# 将多行合并到对象属性中,c#,asp.net-mvc,json,linq,C#,Asp.net Mvc,Json,Linq,我有一个SQL查询,它从使用日志中返回行,如: ActionID ActionType ActionDetail ActionDetailValue 1 SEARCH Query jones 1 SEARCH ResultCount 156 2 DOCUMENT_VIEW Title All About Mister Jones

我有一个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
i、 e.用户执行的每个操作可能有多行,其中包含有关所执行操作的不同详细信息。目前,这在C中表示为:


似乎是LINQ的工作?

我不会过多地开发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()
    };
这并不完全是您要寻找的,但它非常接近,也许处理它会更好,因为它将“键”与值分开

var trailItems = {"trailitems": [
    {"ActionID": "1", "ActionType": "SEARCH", "Query": "jones", "ResultCount" : "156"},
    {"ActionID": "2", "ActionType": "DOCUMENT_VIEW", "Title": "All About Mister Jones", "DocumentID" : "EKDJF34"}
]};
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()
    };
[
    {"ActionID":1,"ActionType":"SEARCH","Values":{"Query":"jones","ResultCount":"156"}},
    {"ActionID":2,"ActionType":"DOCUMENT_VIEW","Values":{"Title":"All About Mister Jones","DocumentID":"EKDJF34"}}
]