Albahariの Predicate を使用して、次のような 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 のいずれかを空にすることはできますが、同時に両方を空にすることはできません。編集:このリストをchannel.Franchise.Nameでも区別する必要があります..ストアドプロシージャを使用する必要がありますか?
これをどのように行いますか?