我目前已将用户有权访问的组织列表设置为列表(List<string> userOrg
)。
列表内容如下所示:
34598
34599
23%
然后我使用此列表填充gridview,因此gridview将为我提供以下所有信息:
34598
34599
everything that starts with: 23
现在我想以某种方式让用户能够搜索gridview
他们将要查找的组织放入文本框中,它填充得很好,但我如何确保只显示他们有权访问的组织?
我想我要问的是,我如何搜索用户组织列表以确保有问题的组织在其中,但同时考虑到通配符。
例如,如果他们搜索“345%我只想显示34598和34599,但不是34566,因为这些是用户可以访问的(在我的userOrg列表中)
我从这开始,但不知道如何处理通配符:
List<string> org = new List<string>();
List<string> userOrg = new List<string>();
userOrg = (List<string>)Session["UserOrgs"] ;
if (txtOrg.Text == "")
Session["UserOrgs"] = userOrg;
else
{
foreach (string item in userOrg)
{
if(Regex.IsMatch(item, txtOrg.Text))
org.Add(txtOrg.Text);
}
Session["UserOrgs"] = org;
}
ObjectDataSource1.Select();
现在,如果我在文本框中输入23%来搜索我有权访问的所有组织,并以23开头,它会匹配并进入if,但是如果我放入 2%进入文本框,它与O在我的userOrg列表中的23%不匹配,并且不返回任何内容。
也许有一种方法可以更轻松地使用LINQ?我之前没有做过多少工作。
答案 0 :(得分:0)
一般来说,当标准字符串操作完成时,我不喜欢使用正则表达式,因为我坚信后者更容易理解,因此更易于维护。在这种情况下,我很想做类似的事情:
Bool isVisible = userOrgs.Any(delegate(string x)
{
String y = txtOrg.Text;
if (y.EndsWith("%"))
{
return x.StartsWith(y.TrimEnd('%'));
}
if (x.EndsWith("%"))
{
return y.StartsWith(x.Trim('%'));
}
return x == y;
}
如果你是正则表达式,那么可以随意添加它们。