Используя linq, вы можете сделать это:
var query = from merchant in merchants
let filteredVouchers = from voucher in merchant.MerchantVouchers
where voucher.VoucherTypeID == 3
select voucher
select new { merchant, filteredVouchers };
или, что эквивалентно, это:
var query =
merchants.Select(
merchant =>
new
{
merchant,
filteredVouchers = merchant.MerchantVouchers.Where(voucher => voucher.VoucherTypeID == 3)
})
.Select(t => new { t.merchant, t.filteredVouchers });
или, избегая linq:
foreach(var merchant in merchants)
{
var filteredVouchers = merchant.MerchantVouchers.FindAll(v => v.VoucherTypeID == 3);
//...some useful code here
}
Обратите внимание, что вам не нужно определять класс MerchantFilter. Вы можете использовать лямбда-выражение для определения аргумента метода FindAll.