0

次のようなデータセットがあります。

foo1, Name, foo2
==================
xxxx, ab01, xxxx
xxxx, ab02, xxxx
xxxx, ab11, xxxx    <---the 1st row of 'ab1%' in Name Column
xxxx, ab12, xxxx
xxxx, ab21, xxxx
xxxx, ab22, xxxx
xxxx, ab31, xxxx
xxxx, ab32, xxxx
xxxx, ab33, xxxx    <---the last row of 'ab3%' in Name Column
xxxx, ab41, xxxx

上記のデータセットと「ab1%」と「ab3%」の間の列「name」から新しいデータセットを取得するにはどうすればよいですか。それは次のように意味します。

foo1, Name, foo2
==================
xxxx, ab11, xxxx
xxxx, ab12, xxxx
xxxx, ab21, xxxx  
xxxx, ab22, xxxx
xxxx, ab31, xxxx
xxxx, ab32, xxxx
xxxx, ab33, xxxx

どうもありがとう。

4

2 に答える 2

0

以下のように使用できます。

var query = from c in DataTableName
where SqlMethods.Like(c.Name, "ab1%") && SqlMethods.Like(c.Name, "ab3%")
select c;

于 2013-04-30T09:07:43.417 に答える
0

Linqを使用してクエリを実行するだけです-これは機能します(ただし、マッチングには正規表現を使用します!!)最も関心のあるビットは、「dataset2」を作成する場所です-これがあなたの質問への答えです。

class Program
{
    static void Main(string[] args)
    {
        var dataset1 = CreateDataSet();
        var regex = new Regex(@"ab[1-3]{1}\d");

        //create dataset
        var oDS = new DataSet();
        var oTable = oDS.Tables.Add();
        oTable.Columns.Add("Foo1", typeof(int));
        oTable.Columns.Add("Name", typeof(string));
        oTable.Columns.Add("Foo2", typeof(int));

        var dataset2 = dataset1.Tables[0].AsEnumerable().Where(x => regex.IsMatch(x["Name"].ToString())).CopyToDataTable();

        foreach (DataRow row in dataset2.Rows)
        {
            Console.WriteLine(row["Name"]);
        }

        Console.ReadLine();
    }

    private static DataSet CreateDataSet()
    {
        //create dataset
        var oDS = new DataSet();
        // create datatable
        var oTable = oDS.Tables.Add();

        //Add coloms
        oTable.Columns.Add("Foo1", typeof(int));
        oTable.Columns.Add("Name", typeof(string));
        oTable.Columns.Add("Foo2", typeof(int));

        //Add rows
        oTable.Rows.Add(1, "ab01", 1);
        oTable.Rows.Add(2, "ab10", 2);
        oTable.Rows.Add(3, "ab11", 3);
        oTable.Rows.Add(4, "ab21", 4);
        oTable.Rows.Add(5, "ab22", 5);
        oTable.Rows.Add(6, "ab31", 6);
        oTable.Rows.Add(7, "ab32", 7);
        oTable.Rows.Add(8, "ab41". 8);

        return oDS;
    }   

}
于 2013-04-30T09:08:03.317 に答える