Asp.net 日期的动态Linq

Asp.net 日期的动态Linq,asp.net,linq,dynamic-linq,Asp.net,Linq,Dynamic Linq,我想建立动态Linq。以下是我的代码,它在一个日期内运行良好。但用户可以从日历中选择许多日期。我需要为所有选定的日期制作Linq saleDate = calendarSales.SelectedDate; List<SaleDetails> saleDetials = new List<SaleDetails>(); saleDetials = GetSaleDetails(); saleDetials.Where(sale => (Convert.ToDateT

我想建立动态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();
saleDate=calendarSales.SelectedDate;
List saleDetials=新列表();
saleDetials=GetSaleDetails();
saleDetials.Where(sale=>(Convert.ToDateTime(sale.DATE\u TIME).Day==saleDate.Day&&
Convert.ToDateTime(sale.DATE\u TIME).Month==saleDate.Month&&
Convert.ToDateTime(sale.DATE\u TIME).Year==saleDate.Year)
).ToList();

如何更新此查询?

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

请看下面的图片

编辑

当然PredicateBuilder支持
运算符

使用
时,必须从初始值
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();
//构建谓词
var pred=PredicateBuilder.False();
foreach(MyDateList中的var日期)
{
pred=pred.Or(sale=>sale.DATE\u TIME.DATE==saleDate.DATE);
}
//最后获取数据并通过我们的动态谓词进行过滤
List saleDetails=GetSaleDetails().Where(pred.ToList();

我不确定您是否需要动态LINQ。您应该能够检查销售与所选日期中的任何日期匹配的地方,如:

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

为什么不比较日期,比如
Convert.ToDateTime(sale.date\u Time).date==saleDate.date
,而不是手动检查每个日期part@MuhammadAdeel Zahid我们在这些领域也会有时间,我想在进行比较时剥离它
DateTime.Date
函数会自动剥离时间并仅返回日期部分tanks@Muhammad adel Zahid,一旦我能够构建动态林齐需求或各种条件之间的数据,我就会这样做,以便所有日期的数据都会出现。这将如何运作?
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();