Можно кодировать исходный запрос:
var query = from tags in db.TagsHeaders
where tags.CST.Equals(this.SelectedCust.CustCode.ToUpper())
&& Utility.GetDate(DateTime.Parse(this.txtOrderDateFrom.Text)) <= tags.ORDDTE
&& Utility.GetDate(DateTime.Parse(this.txtOrderDateTo.Text)) >= tags.ORDDTE
select tags;
И затем на основе условия, добавьте дополнительный где ограничения.
if(condition)
query = query.Where(i => i.PONumber == "ABC");
я не уверен, как кодировать это с синтаксисом запроса, но идентификатор действительно работает с лямбдой. Также работы с синтаксисом запроса для начального запроса и лямбдой для вторичного фильтра.
можно также включать дополнительный метод (ниже) которого я кодировал некоторое время назад для включения условного выражения где операторы. (Не работает хорошо с синтаксисом запроса):
var query = db.TagsHeaders
.Where(tags => tags.CST.Equals(this.SelectedCust.CustCode.ToUpper()))
.Where(tags => Utility.GetDate(DateTime.Parse(this.txtOrderDateFrom.Text)) <= tags.ORDDTE)
.Where(tags => Utility.GetDate(DateTime.Parse(this.txtOrderDateTo.Text)) >= tags.ORDDTE)
.WhereIf(condition1, tags => tags.PONumber == "ABC")
.WhereIf(condition2, tags => tags.XYZ > 123);
дополнительный метод:
public static IQueryable<TSource> WhereIf<TSource>(
this IQueryable<TSource> source, bool condition,
Expression<Func<TSource, bool>> predicate)
{
if (condition)
return source.Where(predicate);
else
return source;
}
Вот тот же дополнительный метод для IEnumerables:
public static IEnumerable<TSource> WhereIf<TSource>(
this IEnumerable<TSource> source, bool condition,
Func<TSource, bool> predicate)
{
if (condition)
return source.Where(predicate);
else
return source;
}
Я полагаю, что ValidatorEnable принимает идентификатор ASP.net, а не идентификатор клиента, созданный ASP.net. Вам также нужно будет сделать проверку условной в CodeBehind.
вот пример:
В частности, используется возможность включать или отключать валидаторы. Если у вас есть проверка, которую вы хотите активировать только в определенных сценариях, вам может потребоваться изменить активацию как на сервере, так и на клиенте, или вы обнаружите, что пользователь не может отправить страницу.
Вот предыдущий пример с полем, которое должен проверяться только тогда, когда флажок снят:
public class Conditional : Page {
public HtmlInputCheckBox chkSameAs;
public RequiredFieldValidator rfvalShipAddress;
public override void Validate() {
bool enableShip = !chkSameAs.Checked;
rfvalShipAddress.Enabled = enableShip;
base.Validate();
}
}
Вот эквивалент на стороне клиента:
<input type=checkbox runat=server id=chkSameAs
onclick="OnChangeSameAs();" >Same as Billing<br>
<script language=javascript>
function OnChangeSameAs() {
var enableShip = !event.srcElement.status;
ValidatorEnable(rfvalShipAddress, enableShip);
}
</script>
Ссылка: http://msdn.microsoft.com/en-us/library/aa479045.aspx
ValidatorEnable(document.getElementById($(this).attr('id')), true);