无效的匿名类型成员声明c#linq?
我有这样的JSON结构:无效的匿名类型成员声明c#linq?
[
{
"code": "T01",
"stock": 0
},
{
"code": "T02",
"stock": 1
}
]
我如何能实现他的结构:
[{
T01: {
stock: 0
}
}, {
T02: {
stock: 1
}
}]
在C#中使用LINQ。
目前我有这行代码:
var inv = inventory.Select(i => new { code = i.SiteCode, stock = i.Stock).ToList().ToArray();
INV的价值将得到第一个结构的结果。
我试图做这样的事情:
inv = inventory.Select(i => new { i.SiteCode = new { stock = i.Stock} }).ToList().ToArray();
我收到以下编译错误:
错误1个无效的匿名类型成员声明。匿名类型 成员必须声明为成员分配,简单名称或 成员访问。
任何帮助吗?
不能动态创建的属性名称一样,使用LINQ。你必须提供一个特定的名字。如果你想要达到的就像你描述的那样,那么最好把它转换成字典。事情是这样的:
var inv = inventory.ToDictionary(key => key.SiteCode, value => new { Stock = value.Stock});
在,你可能有重复SiteCode
当时的也许是因为value
你可以使用一个集合或以其它方式使用ToLookup
的情况。
关于ToArray
/ToList
的使用 - 大多数LINQ的方法不同执行,更像是在做什么(查询)指令。当添加一个方法类似ToList
/ToArray
/FirstOrDefault
/Sum
... - 仅在这一点上查询被实际执行,并返回结果。在上面的情况下,您使用.ToList().ToArray()
- 执行linq并返回List
,然后将其转换为数组。仅使用两个中的一个根据您想要的输出(或我的建议上述转换成字典或查找
这灵魂没有任何作用,它是说在当前上下文中不存在名称值和密钥 – user123456
@ user123456 - 对不起,在值为'='而不是'=>'后出现拼写错误。固定 –
@ user123456 - 这有助于您解决问题吗? –
可惜你不能做到这一点,因为即使类型是匿名的,它仍然是一个静态类型(不是动态的),它必须在编译时已知
对于这种结构(我做了一个类来表示你的):
class A
{
public string code { get; set; }
public int stock { get; set; }
}
我做了下面的算法,不是很好但给出了一种你在问什么:
var objects = new List<A> { new A { code = "T01", stock = 1 }, new A { code = "T02", stock = 2 } };
string s = "[";
objects.ForEach(x => s += "{" + x.code + ": {stock: " + x.stock + "}},");
s = s.Remove(s.Length - 1, 1);
s += "]";
您可以通过添加你需要的空格填写格式,但同样,你要找的是不是一个有效的JSON格式。
'new {i.SiteCode = ...' - 如果你想动态声明成员名称,你不能这样做。 – kiziu
顺便说一句 - 为什么同时使用'ToList()'和'ToArray()'?如果你想要的输出是一个数组,只需使用'ToArray()' –
好吧,我删除它。 – user123456