[英]create querystring using lambda from List T
我在創建適當的選擇時遇到了一些困難。
我有我的自定義課程:
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
由FieldName升序排列
其中IncludeInChecksum = true
FieldName = FieldValue
preMD5= requestParams
.Where(x=>x.IncludeInChecksum)
.OrderBy(y=>y.FieldName)
.Aggregate((i,j)=>(i.FieldName+ "=" +j.FieldValue));
這就是我卡住的地方。 提前致謝
我將嘗試借助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);
Aggregate
匯總來自不同行的值。 您需要合並來自不同字段的值。 為此,請使用Select
:
requestParms.Where(...).OrderBy(...).Select(f=>f.FieldName+"="+f.FieldValue)
這將返回IEnumerable的name=value
字符串。 您可以使用string.Join將它們組合成一個字符串。
我知道已經解決了,但是我仍然想提供解決方案。
我使用了專用方法來構建查詢字符串參數,並使用擴展方法來將其全部連接起來。
希望這可以幫助。
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());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.