0

DataRow 配列内の一連の条件に一致するものを見つけようとしています。

string startDate = "1/1/2012";
string endDate = "11/1/2012";

DataRow[] scheduleResults = myDataTable.AsEnumerable()
    .Where(r => r.Field<string>("Name").Contains("Eglin")
    && r.Field<string>("Name").Contains(startDate)
    && r.Field<string>("Name").Contains(endDate)).ToArray();

これにより、2 つの DataRows が返されますscheduleResults

  1. USAF:Eglin (1/1/2012-11/1/2012)
  2. USAF:Eglin (11/1/2012-3/31/2017)

startDateが実際に含まれていることがわかります。そのためendDate、これら 2 つの結果が得られます。私の質問は、全体をstartDate正確に一致させる方法です。そのため、2番目の結果が返されません。

4

3 に答える 3

2

フォーマットが同じままであると仮定すると、単に一致させることができます"(" + startDate + "-" + endDate + ")"

string startDate = "1/1/2012";
string endDate = "11/1/2012";

DataRow[] scheduleResults = myDataTable.AsEnumerable()
    .Where(r => r.Field<string>("Name").Contains("Eglin")
    && r.Field<string>("Name").Contains("(" + startDate + "-" + endDate + ")"))
    .ToArray();

これは、すべてのデータが「名前」という 1 つのフィールドにあり、タイプミスではないと仮定しています。可能であれば、データ要素を別々の列に格納することをお勧めします。

于 2013-09-06T16:30:36.403 に答える
0

これを使用Regexするのは完璧です:

string name = "Eglin";
DataRow[] scheduleResults = 
        myDataTable.AsEnumerable()
        .Where(r => Regex.IsMatch(r.Field<string>("Name"),
                       string.Format(".*{0}.*{1}.*{2}", name, startDate, endDate)))
        .ToArray();
于 2013-09-06T17:16:36.370 に答える