Динамический Линк для дат - PullRequest
       6

Динамический Линк для дат

0 голосов
/ 28 сентября 2011

Я хочу построить динамический 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 ]

2 голосов
/ 28 сентября 2011

Вы должны построить предикат для вашего предложения where динамически.

Взгляните на построитель предикатов .

EDIT

Конечно, 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();
0 голосов
/ 28 сентября 2011

Я не уверен, что вам нужен динамический 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();
...