我正在尝试使用来自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 行,所以去数据库并选择它们,然后过滤不是一个选项。Channel 是一个 LinqToSql 实体。此外,SelectedFranchises 或 SelectedVendors 可以为空,但不能同时为空。编辑:我还需要通过 channel.Franchise.Name 来区分这个列表。也许我应该只使用存储过程?
你会怎么做?