문제

C#에서 LINQ에서 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;
                }
             */
        }

미리 감사드립니다.

도움이 되었습니까?

해결책

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 ()와 같이 선택을 수행 해야하는 확장을 실제로 호출하거나 결과의 요소를 열거 할 때까지 평가가 지연됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top