C# 使用linq json c时字典中的两个值#

C# 使用linq json c时字典中的两个值#,c#,json,linq,C#,Json,Linq,我无法在创建JSON时添加两个值。 我正在使用LINQ获取数据表中的结果,您能帮我吗 数据表数据。 我尝试过的。 预期结果。 您需要使用字典来保存中间对象: Dictionary<string, List<string>> test = target .GroupBy(r => r.filetype) .ToDictionary(g => g.Key, g => g.ToDictionary(t => t.Ke

我无法在创建JSON时添加两个值。 我正在使用LINQ获取数据表中的结果,您能帮我吗

数据表数据。

我尝试过的。

预期结果。


您需要使用
字典
来保存中间对象:

Dictionary<string, List<string>> test =
       target
      .GroupBy(r => r.filetype)
      .ToDictionary(g => g.Key, g => g.ToDictionary(t => t.Key, t => t.Value));
字典测试=
目标
.GroupBy(r=>r.filetype)
.ToDictionary(g=>g.Key,g=>g.ToDictionary(t=>t.Key,t=>t.Value));

在我看来,您不需要字典,而是需要一个查找表,一个实现的对象

ILookup类似于字典,因此如果您有一个键,则查找将为您提供属于该键的零个或多个值

如果有类似项的可枚举序列,则可以使用

因为除了查找表之外,您可能还想获取
ClsTranslations
,所以我将获取ClsTranslations与将它们放入“字典”分开

用法:

const requestedFileType = Emails;
var requestedKeyValues = target[requestedFileType];
“给我所有文件类型==电子邮件的CLSTRANSLATION

const requestedFileType = Emails;
IEnumerable<ClsTranslation> requestedClsTranslations = target[requestedFileType];
现在您有了一个不同的查找:给我一个文件类型作为键,我将给您一个als{key,Value}组合,它属于一个有这个键的ClsTranslation

用法:

const requestedFileType = Emails;
var requestedKeyValues = target[requestedFileType];
requenstedKeyValues是一个对象序列,其中每个对象都有一个属性键和一个属性值

查找表和字典最重要的区别在于,您不能更改它:您不能在查找表中添加或删除项。如果确实要这样做,请添加到字典

IEnumerable<ClsTranslation> FetchClsTranslations()
{
    return fillDataTable().AsEnumerable()
        .Select(row => new clsTranslation
        {
            Key = row.Field<string>(0) ?? String.Empty,
            Value = row.Field<string>(1) ?? String.Empty,
            FileType = row.Field<string>(2) ?? String.Empty,
        });
}
var target = FetchClsTranslations().ToLookup(...)
    .ToDictionary(lookupItem => lookupItem.Key, lookupItem => lookupItem

ILookup还实现了
IEnumerable
,因此您可以获得查找中每个元素的键。iGroup的每个元素都是序列,而不是有序列。因此
lookupItem=>lookupItem
选择字典值的
永远不会放入
测试
怎么办您希望它进入
newjson
?将
ToDictionary
的第二个参数替换为
t=>t.ToDictionary(r=>r.Key,r=>r.Value)
。您也可以使用匿名*对象创建与上面@NetMage类似的效果。
var test=d.GroupBy(r=>r.FileType)。ToDictionary(t=>t.Key,t=>t.Select(x=>new{x.Key,x.Value}).ToList();
@DekuDesu我想你指的是匿名类型(或对象):@DekuDesu和你的代码,我得到了另一种格式的输出。即“Associate”:[{“Key”:“Address”,“Value”:“АбС”}@NetMage:你能帮我替换什么吗
Key = row.Field<string>(0) ?? String.Empty,
var target = FetchClsTranslations().ToLookup(clsTranslation => clsTranslation.FileType);
const requestedFileType = Emails;
IEnumerable<ClsTranslation> requestedClsTranslations = target[requestedFileType];
var target = FetchClsTranslations().ToLookup(
    // parameter keySelector:
    clsTranslation => clsTranslation.FileType,

    // parameter elementSelector: the values of the lookup is {Key, Value}
    clsTranslation => new
    {
        Key = clsTranslation.Key,
        Value = clsTranslation.Value,
    });
const requestedFileType = Emails;
var requestedKeyValues = target[requestedFileType];
var target = FetchClsTranslations().ToLookup(...)
    .ToDictionary(lookupItem => lookupItem.Key, lookupItem => lookupItem