2009-01-12 231 views
1

我在用c#編寫linq到sql數據查詢表達式的查詢時遇到問題。linq to sql case查詢

我試圖最終做的是基於這個僞代碼表達式。

public IQueryable<CTest> searchRecords(string category, string searchString, DateTime startDate, DateTime endDate, int searchType, int searchType2) 
     { 
      //-Search All Records 
      //-From the information table 
      //-By the category column containing a specific search 
      //-Also by 
      // ~if both a startDate and endDate are entered (not (0000,00,00) OR null) then get records 
      // by this expression 
      // ~else then don't worry about this statement 
      //-Also by 
      // ~if a searchType is equal zero(0) then search for records from the 
      // search_type table equal to zero(0) 
      // ~if a searchType is equal one(1) then search for records from the 
      // search_type table equal to one(1) 
      // ~else then don't worry about this statement 
      //-Also by 
      // ~if a searchType2 is equal zero(0) then search for records from the 
      // search_type table equal to zero(0) 
      // ~if a searchType2 is equal one(1) then search for records from the 
      // search_type table equal to one(1) 
      // ~else then don't worry about this statement 

      //Here is my attempt at it 
      /* 
       var table = db.table1; 

       switch (category) 
       { 
       case "_category1": 
        var records = 
         from c in table 
         where c.column1.ToString().Contains(searchString) 
         select new CTest 
         { 
          test_id = c.id, 
          test_name = c.name, 
          test_number = c.number, 
          date = ((startDate != null) && (endDate != null)) ? ((c.test_date >= startDate) && (c.test_date <= endDate)) : 
             c.test_date), 
          test_type = (searchType == 0 ? (c.searchType = 0) : 
             searchType == 1 ? (c.searchType = 1) : 
             c.searchType), 
          test_type2 = (searchType2 == 0 ? (c.searchType2 = 0) : 
             searchType2 == 1 ? (c.searchType2 = 1) : 
             c.searchType2) 
         }; 
        break; 
       default: 
        break; 
       } 
      */ 
     } 

在此先感謝。

+0

[linq case statement]的可能重複(http://stackoverflow.com/questions/936028/linq-case-statement) – 2014-10-10 18:20:07

回答

3

這將是更容易的擴展方法比LINQ語法做:

var records = context.Table 
         .Where(c => c.column1.Contains(searchString)); 
if (startDate != null && endDate != null) 
{ 
    records = records.Where(c => c.test_date >= startDate 
            && c.test_date <= endDate); 
} 

... 

這將建立的LINQ表達式,當您去。評估被延遲,直到您實際調用一些需要執行選擇的擴展(如Count()或ToList())或枚舉結果的元素。