代码之家  ›  专栏  ›  技术社区  ›  Ayo

linq到sql案例查询

  •  1
  • Ayo  · 技术社区  · 16 年前

    我在用c#中的linq to sql数据查询表达式构建查询时遇到问题。

    我最终要做的是基于这个伪代码表达式。

    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;
                    }
                 */
            }
    

    提前谢谢。

    1 回复  |  直到 16 年前
        1
  •  3
  •   tvanfosson    16 年前

    使用扩展方法比使用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(),或枚举结果的元素。