Если я undertand вопрос ... если у вас есть доступ к LINQ, то становится просто:
(замените IQueryable<T>
с IEnumerable<T>
, если вы используете-в-объектов LINQ)
IQueryable<YourType> query = ctx.SomeObjects;
if(!string.IsNullOrEmpty(name)) {
query = query.Where(x => x.Name == name);
}
if(activeOnly) {
query = query.Where(x => x.IsActive);
}
if(minDate != DateTime.MinValue) {
query = query.Where(x => x.Date >= minDate);
}
if(maxDate != DateTime.MinValue) {
query = query.Where(x => x.Date <= maxDate);
}
var results = query.ToList();
Если вы разговариваете с данными с регулярным ADO.NET, вы можете использовать динамическую композицию запроса или вы можете вызвать SP (или аналогичный), который делает то же самое внутри - например (из первого):
StringBuilder sql = new StringBuilder(
"SELECT * FROM [SOME_TABLE] WHERE 1=1");
if(!string.IsNullOrEmpty(name)) {
sql.Append(" AND [Name][email protected]");
}
if(activeOnly) {
sql.Append(" AND IsActive = 1");
}
if(minDate != DateTime.MinValue) {
sql.Append(" AND [Date]>[email protected]");
}
if(maxDate != DateTime.MinValue) {
sql.Append(" AND [Date]<[email protected]");
}
// create connection, create command, add parameters, use ExecuteReader etc
Вы могли бы перефразировать свой вопрос или немного уточнить его? Возможно, вы уже написали какой-то код, не могли бы вы его разобрать? – RuudKok
Где вы собираетесь искать данные? –
Я не понимаю, в чем вопрос. –