2011-09-28 48 views
0

我想構建動態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(); 

如何更新此查詢?

+0

爲什麼不ü比較喜歡的日期'轉換.ToDateTime(sale.Date_Time).Date == saleDate.Date'而不是手動檢查每個部分 –

+0

@Muhammad Adeel Zahid,我們將有時間在這些領域,以及我想在比較時剝離 – Riz

+1

'DateTime.Date'函數自動剝離時間並僅返回日期部分 –

回答

2

您必須動態地爲where子句構建謂詞。

看看predicatebuilder

EDIT

原因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(); 
+0

好文章1月感謝分享。 –

+0

我需要在各種條件之間進行或運算,以便所有日期的數據都應該到來。這將如何工作? – Riz

+0

我用一個例子更新了我的答案 – Jan

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