我在创建合适的选择时遇到了一些困难。
我有自定义课程:
internal class classA{
internal string FieldName { get; set; }
internal string FieldValue { get; set; }
internal bool IncludeInChecksum { get; set; }
}
我要做的是使用上面的类列表构建和连接查询字符串。 对于以下对象:
List<classA> requestParams = ...
查询字符串应如下所示: A = 1和b = 2和C = 3
按字段名升序排序
其中IncludeInChecksum = true
FieldName = FieldValue
preMD5= requestParams
.Where(x=>x.IncludeInChecksum)
.OrderBy(y=>y.FieldName)
.Aggregate((i,j)=>(i.FieldName+ "=" +j.FieldValue));
这是我被困的地方。
提前谢谢
答案 0 :(得分:1)
我会尝试在Select()
方法的帮助下获取所有 name = value 字符串。然后将结果转换为数组。之后,只需使用String.Join()
方法即可获得所需的结果。
Join(String, String[])
使用每个元素之间的指定分隔符连接字符串数组的所有元素。
var preMD5= requestParams
.Where(x => x.IncludeInChecksum)
.OrderBy(y => y.FieldName)
.Select(z => string.Format("{0}={1}", z.FieldName, z.FieldValue))
.ToArray();
preMD5 = string.Join("&", preMD5);
答案 1 :(得分:0)
Aggregate
聚合来自不同行的值。您需要组合来自不同字段的值。为此,您使用Select
:
requestParms.Where(...).OrderBy(...).Select(f=>f.FieldName+"="+f.FieldValue)
这将返回IEnumerable的name=value
个字符串。您可以使用string.Join将它们组合成一个字符串。
答案 2 :(得分:0)
我知道它已被回答, 但我仍然想提供我的解决方案。
我使用专用方法构建查询字符串参数, 以及一种连接它的扩展方法。
希望这有帮助。
public class classA
{
internal string FieldName { get; set; }
internal string FieldValue { get; set; }
internal bool IncludeInChecksum { get; set; }
public classA(string fieldName, string fieldValue, bool includeInChecksum)
{
this.FieldName = fieldName;
this.FieldValue = fieldValue;
this.IncludeInChecksum = includeInChecksum;
}
public string ToQueryString()
{
return string.Format("{0}={1}",
this.FieldName,
this.FieldValue);
}
public void Test()
{
var list = new List<classA> {
new classA("A", "1", true) ,
new classA("D", "4", true) ,
new classA("B", "2", false) ,
new classA("C", "3", true)
};
var result = list.
Where(o => o.IncludeInChecksum).
OrderBy(o => o.FieldName).
Select(o => o.ToQueryString()).
ToStringEx("&");
}
}
public static class ExtensionMethods
{
public static string ToStringEx<T>(this IEnumerable<T> items, string separetor = ",")
{
if (items == null)
{
return "null";
}
return string.Join(separetor, items.Select(o => o != null ? o.ToString() : "[null]").ToArray());
}
}