C# 使用linq json c时字典中的两个值#
我无法在创建JSON时添加两个值。 我正在使用LINQ获取数据表中的结果,您能帮我吗 数据表数据。 我尝试过的。 预期结果。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
您需要使用
字典
来保存中间对象:
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