首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务键:“键”& Value:" Value“作为键:Value

服务键:“键”& Value:" Value“作为键:Value
EN

Stack Overflow用户
提问于 2013-09-10 17:09:37
回答 1查看 85关注 0票数 0

我有从db获得的动态键和值,然后使用Newtonsoft Json.NET进行解析,但我不知道如何将它们作为静态键和值。

示例

这就是我所拥有的

代码语言:javascript
复制
{
    "Id": 1,
    "IsPublic": false,
    "Notes": "",
    "Values": [
        {
        "Key": "1",
        "Value": "12.02.1991"
        }
    ]
}

这就是我想要的

代码语言:javascript
复制
{
    "Id": 1,
    "IsPublic": false,
    "Notes": "",
    "Values": [
        {
            "1": "12.02.1991"
        }
    ]
}

我试过的

我试图在查询本身中手动执行该操作,但是它没有工作,因为它试图分配值。

代码语言:javascript
复制
return _db.Archives.Single(x => x.Id == id).Batches.SelectMany(x => x.Items).Select(item => new
{
    item.Id,
    item.IsPublic,
    item.Notes,
    Values = item.ArchiveFieldValues.Select(value => new
    {
        /*
        This works just fine
        Key = value.ArchiveField.Key,
        Value = value.Value
        */

        // This is what I tried but it does not work
        value.ArchiveField.Key = value.Value
    })
}).AsQueryable();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-10 17:31:46

首先,它足够复杂,您可能想把它拉到它自己的函数中。

您可以使用ExpandoObject作为可以动态添加和移除属性的对象。只需将其转换为IDictionary (它显式地实现该接口)并添加对。您可以根据您喜欢的任意方式将结果键入为dynamicExpandoObject

代码语言:javascript
复制
//I know this isn't the real type of your input; 
//modify the parameter to be of the actual type of your collection of pairs
//TODO come up with better name for this function
public static dynamic Foo(IEnumerable<KeyValuePair<string,string>> pairs)
{
    IDictionary<string, object> result = new ExpandoObject();
    foreach (var pair in pairs)
        result.Add(pair.Key, pair.Value);
    return result;
}

然后,您的查询可以修改为:

代码语言:javascript
复制
Values = Foo(item.ArchiveFieldValues),

还请注意,查询提供程序很可能无法对该转换进行任何操作,因此您可能需要在选择之前提交一个AsEnumerable,以便在linq中对对象执行此投影。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18725025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档