0

現在、ユーザーがアクセスできる組織のリストをリスト ( List<string> userOrg) に設定しています。

リストの内容は次のようになります。

34598
34599
23%

次に、このリストを使用してグリッドビューにデータを入力すると、グリッドビューから次のすべての情報が得られます。

34598
34599
everything that starts with: 23

今、私はどうにかしてそのグリッドビューを検索する機能をユーザーに与えたいと思っています

検索したい組織をテキスト ボックスに入力すると、問題なく表示されますが、アクセスできる組織のみを表示するにはどうすればよいでしょうか?

私が求めているのは、ユーザー組織のリストを検索して、問題の組織がその中にあることを確認する方法ですが、同時にワイルドカードを考慮に入れる方法です。

たとえば、「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 の 23% が userOrg リストにあり、何も返しません。

LINQ で簡単にできる方法はないでしょうか。私はこれまであまりやったことがありません。

4

1 に答える 1

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;
                              }

正規表現が好きな場合は、必要に応じて自由に追加してください。

于 2013-03-07T17:02:39.490 に答える