【问题标题】:Conditionally binding dropdownlist in asp.netasp.net中的条件绑定下拉列表
【发布时间】:2017-06-03 18:19:26
【问题描述】:

我有一个这种特殊格式的字符串

string LogInIDs = 124,345, 876 | 765,322, 98 | 565,99

字符串中的所有数字都是唯一的登录 ID。使用管道符号,对 id 进行分组。现在,假设 LogInID345,那么我需要绑定其他数字(本例中为 124 & 876 ) 在下拉列表中的组中。下面的函数是我为检索其他数字所做的。

任何人都可以提出更好的想法或建议

public static List<string> RetrieveAffCodes(string LogInIDs , string LogInID)
{
    List<string> _finale = new List<string>();

    string[] sep1 = new string[1];
    sep1[0] = "|";

    int count = LogInIDs.Count(x => x == '|');
    string[] groups = new string[count + 1];
    groups = LogInIDs.Split(sep1, StringSplitOptions.RemoveEmptyEntries);

    foreach (string g in groups)
    {
        string p = g;
        string[] sep2 = new string[1];
        sep2[0] = ",";
        int counter = p.Count(x => x == ',');
        string[] final_list = new string[counter + 1];
        final_list = p.Split(sep2, StringSplitOptions.RemoveEmptyEntries);

        foreach (string _f in final_list)
        {
            if (_f.Trim() == LogInID)
            {
          _finale =  AddLogInIDs(final_list, final_list.Count());
            }
        }
    }
    return _finale;
}

private static List<string> AddLogInIDs(string[] final_list, int p)
{
    List<string> _finale = new List<string>();
    foreach (var item in final_list)
    {
        _finale.Add(item.Trim());
    }
    return _finale;
}

我们将接受任何建议。

感谢您的时间和耐心。

注意:字符串将扩展到 200 个组

【问题讨论】:

标签: c# asp.net arrays list asp.net-2.0


【解决方案1】:

试试这个..

    public static List<string> RetrieveAffCodes(string logInIDs, string logInID)
    {
        return logInIDs
        .Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
        .Where(a => a.Split(',').Any(c => c.Trim().Equals(logInID)))
        .Select(a => a.Split(',').ToList()).FirstOrDefault();
    }

【讨论】:

    【解决方案2】:

    这对你有用吗?

    using System;
    using System.Collections.Generic;           
    using System.Linq;
    
    public class Program
    {
        public static void Main()
        {
            string LogInIDs = "124,345,876|765,322,98 |565,99";
    
            Console.WriteLine(string.Join("\n", RetrieveAffCodes(LogInIDs, "322")));
            Console.WriteLine(string.Join("\n", RetrieveAffCodes(LogInIDs, "565")));
        }
    
        public static IEnumerable<string> RetrieveAffCodes(string logInIDs , string logInID)
        {
            //We split the list
            var list = logInIDs.Split('|');
            //We look for an item with the logInID, if found (?) we split using ',' and then we remove the item
            var match = list
                .Select(i => i.Split(',').Select(item => item.Trim()))
                .FirstOrDefault(i => i.Contains(logInID))?
                .Where(i => i != logInID);
    
            if(match != null)
            {
                return match;
            }
    
            return new List<string>();
    
        }
    }
    

    源码:https://dotnetfiddle.net/M2FyNk

    【讨论】:

    • RetrieveAffCodes(LogInIDs, "32") 和 RetrieveAffCodes(LogInIDs, "322") 返回相同的结果。
    • 好收获@levent
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    相关资源
    最近更新 更多