Я пытаюсь использовать предикат из Albahari для создания инструкции TSQL, например:
select * from channel
where channel.VendorID IN (@vendorIDs)
AND channel.FranchiseID IN (@franchiseIDs)
или предикат вроде: c => (c.VendorID = x || c.VendorID == x2 ...) && (c.FranchiseID == f || c.FranchiseID == f2 ...)
но у меня проблемы. Вот моя попытка:
var vendorPredicate = PredicateBuilder.False<Channel>();
foreach (Vendor vendor in workOrderSessionData.SelectedVendors)
{
int tempId = vendor.VendorID;
vendorPredicate = vendorPredicate.Or(c => c.VendorID == tempId);
}
var franchisePredicate = PredicateBuilder.False<Channel>();
foreach (Franchise franchise in workOrderSessionData.SelectedFranchises)
{
int tempId = franchise.FranchiseID;
franchisePredicate = franchisePredicate.Or(c => c.FranchiseID == tempId);
// doesn't work franchisePredicate.Or(vendorPredicate);
}
Channel.SelectByPredicate(franchisePredicate);
В моей таблице 60 000 строк, поэтому перейти к базе данных и выбрать их все, а затем фильтрация невозможна. Канал — это объект LinqToSql. Также либо SelectedFranchises, либо SelectedVendors могут быть пустыми, но не оба одновременно. РЕДАКТИРОВАТЬ: мне нужно также разделить этот список по каналу. Франчайзинг. Имя. Может быть, мне следует просто использовать хранимую процедуру?
Как бы вы это сделали?