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 回答