簡體   English   中英

使用清單T中的lambda創建查詢字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM