动态Linq的日期

时间:2011-09-28 09:25:03

标签: asp.net linq dynamic-linq

我想构建动态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();

如何更新此查询?

2 个答案:

答案 0 :(得分:2)

您必须动态地为where子句构建谓词。

查看predicatebuilder

修改

原因PredicateBuilder支持ANDOR运算符。

使用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();

答案 1 :(得分:0)

我不确定你在这里需要动态LINQ。您应该能够检查所选日期的Where销售匹配Any,如下所示:

var saleDates = GetSelectedDate();

List<SaleDetails> saleDetials = new List<SaleDetails>();
saleDetials = GetSaleDetails();
saleDetials.Where(sale => saleDates.Any(date => 
   (Convert.ToDateTime(sale.DATE_TIME).Day == date.Day &&
    Convert.ToDateTime(sale.DATE_TIME).Month == date.Month && 
    Convert.ToDateTime(sale.DATE_TIME).Year == date.Year)
    )).ToList();

或检查Date属性:

var saleDates = GetSelectedDate();

List<SaleDetails> saleDetials = new List<SaleDetails>();
saleDetials = GetSaleDetails();
saleDetials.Where(sale => saleDates.Any(date => 
   Convert.ToDateTime(sale.DATE_TIME).Date == date.Date)).ToList();