2012-02-05 8 views
1

私は、asp.netのentitydatasourceから読み込まれたgridviewを持っています。私のC#コードビハインドでは、> = validDate1および< = validDate2以外のすべてのデータをフィルタリングするエンティティデータソースにWHEREパラメータを追加する必要があります。DateTime WHEREパラメータ

using (RamRideOpsEntities myEntities = new RamRideOpsEntities()) 
{ 
    var validDates = (from a in myEntities.AdminOptions 
         select new { a.ValidDate1, a.ValidDate2 }).FirstOrDefault(); 

    if (validDates != null) 
    { 
     RidesGridView.Where = " ..... ??? " //TODO 
    } 
} 

編集:私はでてるのはここ

がある以下の答えを、私はより明確にしましょう。.. = ....文はちょうど私が必要とする2つの有効な日付を取得しているvalidDatesグリッドビューに表示されるデータが有効な日付範囲内に入るように、エンティティデータソースに句を追加する必要があります。

+1

すると、データベースでフィルタリングするほうがよいのではないでしょう... –

+1

私は間違っているかもしれないが、それは私でしたエンティティデータソースを使用する場合、データが実際にdbから取得される前にwhere句が適用されることを理解しているので、実際にはこれを実行しようとしています。 – SHeinema

+0

@SHeinema - いいえ、私たちが投稿したコードを試してみてください。それが動作します。 –

答えて

3

あなたはEntityDataSourceを使用しています。これは、実行時定義の文字列を使用してクエリを変更することができる、非常にunint型です。より多くのlinq-ishテクニックは、文字列がプログラムの言語の一部であることを好み、コンパイラはそれを式ツリーにします(他の人が投稿したように)。 EntityDataSourceを使用している限り、linq-ishアプローチは機能しません。

EntityDataSource.Whereを参照しているmsdnの記事から、 "it"という魔法の単語を使用して行を記述する必要があるようです。次に、.WhereParametersコレクションにパラメータを指定します。

コード:

using (myEntities = new RamRideOpsEntities()) 
{ 
     var validDates = (from a in myEntities.AdminOptions 
         select new { a.ValidDate1, a.ValidDate2 }).FirstOrDefault(); 

     if (validDates != null) 
     { 
     RidesEDS.Where = @"it.TimeOfCall >= @ValidDate1 AND it.TimeOfCall <= @ValidDate2"; 
     RidesEDS.WhereParameters.Add(@"ValidDate1", DbType.DateTime, validDates.ValidDate1.ToString()); 
     RidesEDS.WhereParameters.Add(@"ValidDate2", DbType.DateTime, validDates.ValidDate2.ToString()); 
     } 
} 
+0

申し訳ありません、David Bさん、私は緑のチェックマークがあなたに行かなければならないと言います。これは私が得ようとしていたものです。コードにかなり良い推測もありました。ありがとう! – SHeinema

0
var validDates = (from a in myEntities.AdminOptions where 
    a.ValidDate1 >= validDate1 && a.ValidDate2 <= validDate2 
    select new { a.ValidDate1, a.ValidDate2 }).FirstOrDefault(); 
+0

私の編集を見てください^^ – SHeinema

0

あなたはGridViewコントロールをフィルタリングしていないが、あなたは、データ・ソースをフィルタリングします。答えは、あなたが持っているデータソースの種類に依存しますが、それはLINQの互換性だと仮定すると:

var items = dataSource.Where(
     d => d.Date >= validDates.ValidDate1 && d.Date <= validDates.ValidDate2 
    ); 
RidesGridView.DataSource = items; 
関連する問題