2012-02-05 77 views
1

我有一個從asp.net中的entitydatasource填充的gridview。在我的c#代碼隱藏中,我需要向實體數據源添加一個WHERE參數,它將過濾掉所有不是> = validDate1和< = validDate2的數據。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 
    } 
} 

編輯:下面的答案,讓我更清楚..的validDates = ....聲明就得到兩個有效日期,我需要通過..進行篩選,需要將「where」子句添加到實體數據源,以便網格視圖中顯示的數據在有效日期範圍內。

+1

豈不是更好地在數據庫過濾... – 2012-02-05 02:45:39

+1

我可能是錯的,但它是我瞭解在使用實體數據源時,在從數據庫實際檢索數據之前應用where子句,實際上這正是我正在嘗試執行的操作。 – SHeinema 2012-02-05 02:47:54

+0

@SHeinema - 不,只是嘗試我們發佈的代碼。它會工作。 – 2012-02-05 03:02:33

回答

3

您正在使用EntityDataSource。這是一個非unlinq類型,它允許您使用運行時定義的字符串來修改查詢。更多的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 2012-02-05 07:55:49

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

請看我的編輯^^ – SHeinema 2012-02-05 02:44:16

0

你不過濾GridView控件,您篩選的數據源。答案將取決於你有什麼樣的數據源,但假設它的LINQ兼容:

var items = dataSource.Where(
     d => d.Date >= validDates.ValidDate1 && d.Date <= validDates.ValidDate2 
    ); 
RidesGridView.DataSource = items;