2011-09-28 1 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

'변환 당신과 같이, 판매 선택한 날짜의 Any 일치 Where을 확인 할 수 있어야한다 .ToDateTime (sale.Date_Time) .Date == 각 부분을 수동으로 확인하는 대신 saleDate.Date를 사용하십시오. –

+0

@Muhammad Adeel Zahid, 우리는이 필드에서도 시간을 가질 것입니다. 비교를하면서 스트립하고 싶습니다. – Riz

+1

'DateTime.Date' 함수는 시간을 자동으로 제거하고 날짜 부분 만 반환합니다. –

답변

2

where 절에 대한 술어를 동적으로 빌드해야합니다.

predicatebuilder을 살펴보십시오. 원인 PredicateBuilder의

편집

ANDOR 연산자를 지원합니다.

False의 초기 값으로 시작하는 당신이 OR를 사용하여 :

// 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

다양한 조건 사이에 OR이 필요하므로 모든 날짜의 데이터가 있어야합니다. 어떻게 작동할까요? – Riz

+0

예제를 사용하여 답변을 업데이트했습니다. – Jan

0

난 당신이 여기에 동적 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(); 

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