動的なLinqを構築したい。以下は、ある日付で正常に機能する私のコードです。しかし、ユーザーはカレンダーから多くの日付を選択できます。そして、私はそれらすべての選択された日付に対してLinqを作成する必要があります。
saleDate = calendarSales.SelectedDate;
List<SaleDetails> saleDetials = new List<SaleDetails>();
saleDetials = GetSaleDetails();
saleDetials.Where(sale => (Convert.ToDateTime(sale.DATE_TIME).Day == saleDate.Day &&
Convert.ToDateTime(sale.DATE_TIME).Month == saleDate.Month &&
Convert.ToDateTime(sale.DATE_TIME).Year == saleDate.Year)
).ToList();
このクエリを更新する方法は?
where句の述語を動的に作成する必要があります。
predicatebuilderを見てください。
編集
当然、PredicateBuilderはAND
およびOR
演算子をサポートしています。
OR
を使用する場合は、初期値のFalse
から始める必要があります。
// building the predicate
var pred = PredicateBuilder.False<SaleDetails>();
foreach (var date in MyDateList)
{
pred = pred.Or(sale => sale.DATE_TIME.Date == saleDate.Date);
}
// finally get the data and filter it by our dynamic predicate
List<SaleDetails> saleDetails = GetSaleDetails().Where(pred).ToList();