2

データテーブルがあり、LINQ を使用して文字列のリストに対してフィルター処理を行い、各文字列をパイプ ('|') で区切り、2 つの値を含めたいと考えています。文字列のリスト(List Actions)はこんな感じ。このリストには 2 つの文字列しかありませんが、さらに多くの文字列を含めることができます。

    8/1/2013 9:57:52 PM|Login for bill.lock@cap.com
    8/1/2013 9:57:37 PM|Login for bill.lock@cap.com

データテーブルには各行に 5 つのフィールドがあり、上記のリストの各文字列を使用してデータテーブルの 2 つのフィールド (テキストと時間) を比較し、それらの行を省略または削除しています。データテーブルはこのように構成されています

    DataTable stdTable = new DataTable("Actions");
    DataColumn col1 = new DataColumn("Area");
    DataColumn col2 = new DataColumn("Action");
    DataColumn col3 = new DataColumn("Time");
    DataColumn col4 = new DataColumn("Text");

現在、私はこれをすべて手動で実行していますが、LINQ ではわずか数行のコードで実行できることを知っています。リストを反復処理して分割を使用する方法がわかりません。この例を見ましたが、分割は私を超えています。

    // Get all checked id's.
    var ids = chkGodownlst.Items.OfType<ListItem>()
    .Where(cBox => cBox.Selected)
    .Select(cBox => cBox.Value)
    .ToList();

    // Now get all the rows that has a CountryID in the selected id's list.
    var a = dt.AsEnumerable().Where(r => 
    ids.Any(id => id == r.Field<int>("CountryID"))
    );

    // Create a new table.
    DataTable newTable = a.CopyToDataTable();

どんな助けでも大歓迎です。

ありがとう

4

1 に答える 1

2
List<string> list = {
                       "8/1/2013 9:57:52 PM|Login for bill.lock@cap.com",
                       "8/1/2013 9:57:37 PM|Login for bill.lock@cap.com"
                    };
var a = dt.AsEnumerable().Where(x=>
              !list.Select(y=> new {
                                    Time =  DateTime.Parse(y.Split('|')[0]),
                                    Text = y.Split('|')[1]
                                  })
                  .Any(z=> z.Time == x.Time && z.Text == x.Text));

また

var a = dt.AsEnumerable().Where(x=>
                    !list.Any(y=> y == string.Format("{0}|{1}",x["Time"],x["Text"])));

DataTable newTable = a.CopyToDataTable();
于 2013-08-02T02:47:22.727 に答える