在用户("用户A")可以使用SOAP建立自己的Web服务连接的ASP.NET应用程序中,我让它们插入自己的信封,例如,这些信封可能是这些内容:
//Formatted for Clarity
string soapMessage =
"<soap: Envelope //StandardStuff>
<soap:Header //StandardStuff>
<wsse:UsernameToken>
<wsse: Username>{F1}</wsse:Username>
<wsse: Password Type''>{F2}</wsse:Password>
</wsse:UsernameToken>
</soap:Header>
<soap:Body>
<ref:GetStuff>
<ref:IsActive>{F3}</ref:IsActive>
</ref:GetStuff>
</soap:Body>
</soap:Envelope>"
Run Code Online (Sandbox Code Playgroud)
同时我是一个发送数据数组的"用户B",从javascript传递给json,看起来像这样:
[
{
key: "F1",
value: "A"
},
{
key: "F2",
value: "B"
},
{
key: "F3",
value: "C"
}
];
Run Code Online (Sandbox Code Playgroud)
在反序列化(dynamic JsonObject = JsonConvert.DeserializeObject(stringifiedJson);)之前,此数组作为字符串输入fray .
现在,我希望能够将相应的值插入到信封中,最好具有一定程度的安全性,不允许人们通过在数组中插入奇怪的值来执行时髦的东西(正则表达式可能是我最后的手段) .
到目前为止,我已经意识到构建字符串的概念({}将肥皂消息中的's替换为{0}, {1} & {2}):
string value1 = "A";
string value2 = "B";
string value3 = "C";
var body = string.Format(@soapMessage, …Run Code Online (Sandbox Code Playgroud) 我有一个像这样构建的SQL表:
项目:
Id ItemId VersionId
---------- ---------- ----------
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2
6 3 1
Run Code Online (Sandbox Code Playgroud)
现在我想用linq选择每个项目的最新版本.预期的产出是:
Id ItemId VersionId
---------- ---------- ----------
3 1 3
5 2 2
6 3 1
Run Code Online (Sandbox Code Playgroud)
每个项目都有自己的版本计数,因此创建项目1的新版本将为其提供VersionId 4,而创建项目3的新版本将为其提供VersionId为2.
到目前为止,我试图选择项目,然后使用GroupBy:
var query = from i in items
select i;
var test = query.GroupBy(q => q.ItemId).ToList();
Run Code Online (Sandbox Code Playgroud)
这将返回3个组的列表,每个项目一个组.
现在,我将如何继续并获取这些组中仅包含最新版本项目的列表?