linqを使用してc#のデータベースの日付列をフィルタリングする

I have a Table with 3 Columns, Id, Name and Birthday

Id | Name | Birthday
-- | ---- | -----------
1  | John | 1993/07/12
2  | Sarah| 1995/02/05
3  | Jack | 1990/10/01

DataGridView Person を表示して、生年月日が1994/05/20より低いことを確認します。
LINQを使用してクエリを作成しています

1
あなたが書いたコードを私に教えてください。
追加された 著者 Vijayanath Viswanathan,
あなたは何でも自分で試しましたか?
追加された 著者 Dipen Shah,

4 答え

Assuming your Birthday column is of type Date

DateTime dt=DateTime.ParseExact("1994/05/20", "yyyy/MM/dd", CultureInfo.InvariantCulture);
var result =   from t in context.table
               where t.Birthday < dt
               select t;

EDIT

文字列型の場合は、日付形式に変換して上記のように比較する必要があります。

 var result =   from t in context.table
                   where   DateTime.Parse(t.Birthday,"yyyy/MM/dd",CultureInfo.InvariantCulture) < dt
                   select t;
2
追加された
私は色盲です、質問をはっきりと読みませんでした
追加された 著者 Sajeetharan,
"using namespace System.Globalization;"がありません。
追加された 著者 Sajeetharan,
これが役に立った場合は回答としてマーク
追加された 著者 Sajeetharan,
誕生日はnTextなのでこれはうまくいきません。
追加された 著者 Robert McKee,
質問は誕生日の列の種類は日付ではなくnText です
追加された 著者 Robert McKee,
OPが明確に言ったことを想定したことの意味は何ですか?
追加された 著者 Ivan Stoev,
@ Sajeetharanはい、ありがとう
追加された 著者 Damon,
あなたの答えをありがとう、私にこのエラーをください、 'CultureInfo'という名前は現在のコンテキストには存在しませんか?
追加された 著者 Damon,

誕生日は常にYYYY/MM/DD形式であると仮定して進みます。

Persons.Where(p=>p.Birthday<"1994/05/20");

しかし、これはYYYY/MM/DDの日付はソート可能であるためにしか機能しません。したがって、それらを実際のdate/datetimeオブジェクトに解析して文字列として比較する必要はありません。

If the LINQ provider you are using doesn't support string compares using <, then you can do this instead:

Persons.Where(p=>p.Birthday.CompareTo("1994/05/20") < 0);
1
追加された
@IvanStoevありがとう、私はほとんどを忘れないようにしているので、回避策を追加しました。
追加された 著者 Robert McKee,
確かに、残念ながら string には <演算子はありません。
追加された 著者 Ivan Stoev,
とにかくC#:)という意味でした。
追加された 著者 Ivan Stoev,

日付を使用している場合は、自分で好みを選択し、厳密に入力フィールド、 それは将来あなたに多くの「頭痛」を救うでしょう。

この例では、強く型付けされた新しいDataColumnフィールドが宣言され、日付を含むすべての文字列が「実際の」日付に変換されていることがわかります。その後、LINQを使用して結果を安全に新しいデータ構造にフィルタリングします(この例では、 DataTable を選択します)。

private void Funky()
{
    DataColumn RealDate = new DataColumn("RealDate");
    RealDate.DataType = System.Type.GetType("System.DateTime");
    dt.Columns.Add(RealDate);

   //strongly type a DateTime Column it will save you alot of problems in the future
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        string[] temp = dt.Rows[i]["BirthDay"].ToString().Split('/');
        dt.Rows[i]["RealDate"] = new DateTime(int.Parse(temp[0]), int.Parse(temp[1]), int.Parse(temp[2]));
    }

   //finaly get you result
    var targetDate = new DateTime(20, 5, 1994);

    DataTable FilterDt = dt.AsEnumerable().Where(x => x.Field("RealDate") < targetDate).Select(y => y).CopyToDataTable();
    dataGridView1.DataSource = FilterDt;
}
1
追加された
dt RealDate とは何ですか?
追加された 著者 Damon,

ここに掲載されている回答の大部分は、誕生日を日付時刻列としています。

最初にテキストをDateTimeにパースし して、次に示すように比較します。

これを試して :

DateTime dt = new DateTime("1994/20/05");

var result = EmployeeDetails.Where(a => DateTime.ParseExact(a.Birthday ,"yyyy/dd/mm",CultureInfo.InvariantCulture) < dt ).ToList();
1
追加された
あなたは投票して回答として受け入れることができるようになりました
追加された 著者 jANVI,
System.Globalizationを使用して使用します。アプリケーションが異なるカルチャ設定を提供している可能性があるため、CultureInfoを使用することをお勧めします。
追加された 著者 jANVI,
メソッド 'System.DateTime ParseExact(System.String、System.String、System.IFormatProvider)'には、SQLへのサポートされた変換はありません。
追加された 著者 Damon,
あなたの答えをありがとう、私にこのエラーをください、 'CultureInfo'という名前は現在のコンテキストには存在しませんか?
追加された 著者 Damon,