Linq查询从Array中获取具有匹配子字符串值

时间:2015-07-14 11:57:10

标签: c# linq

我有一个字符串 - filterArg 和字符串数组 - arrayColDef ,如下面的代码所示。我正在尝试将字符串 filterArg 拆分为 |~| 并尝试从 filterArg 匹配 arrayColDef 值。 任何人都可以告诉我如何在代码中注明 ToDo 的值

static void Main(string[] args)
        {
            Hashtable ht = new Hashtable();
            string filterArg = "ZipCode=2130|~|ZipPlace=KNAPPER";
            string[] arrayColDef = { "ZipCode", "Space", "ZipPlace" };

            foreach (var item in arrayColDef)
            {
                var key = item;
                var value = filterArg.Split(new string[] { "|~|" }, StringSplitOptions.RemoveEmptyEntries);//TODO: here value should hold = 2130 for first itteration
                ht.Add(item, value);
            }

        }

3 个答案:

答案 0 :(得分:0)

我认为你在arrayColDef上进行复杂迭代,通过拆分字符串迭代并提取值更容易。 你可以做类似下面的事情。

static void Main(string[] args)
{
    Hashtable ht = new Hashtable();
    string filterArg = "ZipCode=2130|~|ZipPlace=KNAPPER";
    string[] arrayColDef = { "ZipCode", "Space", "ZipPlace" };

    var properties = filterArg.Split(new string[] { "|~|" }, StringSplitOptions.RemoveEmptyEntries);
    foreach (var property in properties)
    {
        var nameValue = property.Split(arrayColDef, StringSplitOptions.RemoveEmptyEntries);
        var item = property.Split('=').First(); // get key
        var value = nameValue.First().TrimStart('='); // get value
        ht.Add(item, value);
    }
}

答案 1 :(得分:0)

Hashtable ht = new Hashtable();
string filterArg = "ZipCode=2130|~|ZipPlace=KNAPPER";
string[] arrayColDef = { "ZipCode", "Space", "ZipPlace" };
var filterArr = filterArg.Split(new string[] { "|~|" }, StringSplitOptions.RemoveEmptyEntries)
    .Select(x => x.Split('='));
foreach (var item in arrayColDef)
{
    var key = item;
    var v = filterArr.FirstOrDefault(x => x[0] == item);
    if (v != null&&v.Length>1)
    {
        ht.Add(item, v[1]);
    }
}

foreach (var key in ht.Keys)
{
    Console.WriteLine("Key:{0} Value:{1}", key, ht[key]);
}

Space已被忽略

答案 2 :(得分:0)

过滤器分割为

var value = filterArg.Split(new string[] { "|~|" }, StringSplitOptions.RemoveEmptyEntries);//TODO: here value should hold = 2130 for first itteration

返回一个数组。您可以通过过滤和替换为linq来获取最终值:

string finalValue = value.Where(m => m.Contains(item)).Select(m => m.Replace(item+"=","")).FirstOrDefault();

然后,该值位于finalValue变量中。

问候