query case da linq a sql
-
22-07-2019 - |
Domanda
Sto riscontrando problemi nella creazione di una query con l'espressione della query di dati linq to sql in c #.
Quello che sto cercando di fare alla fine è basato su questa espressione di pseudo-codice.
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;
}
*/
}
Grazie in anticipo.
Soluzione
Questo sarebbe più facile da fare con i metodi di estensione rispetto alla sintassi 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 );
}
...
Questo costruirà l'espressione LINQ mentre procedi. La valutazione è ritardata fino a quando non invochi effettivamente un'estensione che richiede l'esecuzione della selezione, come Count () o ToList (), o enumera gli elementi del risultato.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow