0

私はそのような状況を持っています。1つのクラスのオブジェクトを保持しているリストがあります(このオブジェクトには、「名前」、「タイプ」、「インデックス」、「値」、「ステータス」、「パラメーター」の6つのプロパティがあります)。後で、それを gridView にバインドしています。ここで、このプロパティごとにフィルターを作成できるようにしたいと考えています。たとえば、テキストボックス「名前」に挿入できるようにしたい:ジョン、そして、ジョンがいる行のみをgridViewに表示したいと思います。

2 つ目は、フィルタを混在させたいということです。たとえば、「名前」を「ジョン」に、「インデックス」を 5 に設定し、「ジョン」を「インデックス」を 5 に設定します。

これどうやってするの?

今、すべてをリストに挿入する機能しかありません。このオブジェクトは、クラス WholeLine の Middle プロパティ内に格納されます。

Correction method = new Correction();

while ((line = sr.ReadLine()) != null)
{
string[] _columns = line.Split(",".ToCharArray());
object returnValue;

MyColumns mc = new MyColumns();
mc.Time = _columns[0];
mc.Information = _columns[1];
mc.Description = _columns[2];

if (String.IsNullOrEmpty(mc.Information) )
{ continue; }
else
{
     returnValue = method.HandleRegex(mc.Information);
}
Line main = new Line();
main.LeftColumn = mc.Time;
main.Middle= returnValue;
main.RightColumn = mc.Description;
list3.Add(main);
}

編集:

私の状況ではそれほど単純ではありません (私は思います...)。後で、クラスからメソッド HadleRegex を呼び出しますCorrection。以下に、それがどのように見えるかを示します。

class Correction
{
    private MoreInfor _MoreInfor = new MoreInfor();

    public MoreInfor MoreInfor { get { return _ID; } }

Correction sk = new Correction();

            Match matches = Regex.Match(newStr, @"\b(?:complete\b)", RegexOptions.IgnoreCase);
            if (matches.Success)
            {

                string[] lines = newStr.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                Regex regex1 = new Regex(@"^(?:(?<C0>Command) (?:answer|sent) from (?<C1>\S+) to (?<C2>\S+) (?<C3>.+))$");
                var matches1 = lines.Select(line => regex1.Match(line));

                foreach (var match in matches1)
                {
                    sk._MoreInfor.Name= match.Groups["C1"].ToString();
                    sk._MoreInfor.Type = match.Groups["C2"].ToString();
                    sk._MoreInfor.Value = match.Groups["C3"].ToString();
                    sk._MoreInfor.Index = match.Groups["C4"].ToString();
                }
            }
   return sk;
}

public class MoreInfo
{
    public string Name{ get; set; }
    public string Type { get; set; }
    public string Index { get; set; }
    public string Value { get; set; }
    public string Status { get; set; }
    public string Parameter { get; set; }
}

この返されたクラスの値Correctionは、後でメイン クラスから渡され、クラスのプロパティにreturnValue追加されますMiddleLine

本当にズレてたらごめんなさい!

4

3 に答える 3

2

linq を使用できます-どこで

var result = list.Where(x => x.Name == textBoxName.Text).ToList();

これは、テキストボックスが名前を検索することを前提としています

複数のフィルターの場合、

list.Where(x => x.Property == "something" && x.Name == textBoxName.Text).ToList();
list.Where(x => result.Where(ix => x.Property == "something").ToList();
于 2013-08-07T06:36:39.793 に答える
0

ファイラーにlinqを使用する

yourlist.Select(x=>x.Name == "John");
于 2013-08-07T06:37:13.703 に答える
0

いくつかの「NoFilter」値を定義できます。たとえば、index は -1、または Name = "" です。

public List<person> FilterPersons (List<person> persons,
                    string name = "",
                    string type = "",
                    int index = -1,
                    int value = -1,
                    int status = -1,
                    string parameter = "")
{
    return persons
           .Where
           (
               x=>
               (name == "" || x.Name == name)
               && (type == "" || x.Type == type)
               && (index == -1 || x.Index == index)
               && (value == -1 || x.Value == value)
               && (status == -1 || x.Status == status)
               && (parameter == "" || x.Parameter == parameter)
           )
           .Select(x=>x);
}

そして、次のように呼び出すことができます。

filterPersons = FilterPersons(persons: persons,name: "John");

また

filterPersons = FilterPersons(persons: persons,index: 10, status: 5);
于 2013-08-07T06:44:58.283 に答える