从下面的代码我可以使用谓词搜索并找到ID大于4的所有商家,使用类似的方法我将如何返回所有商家及其凭证,其中凭证具有VoucherTypeID 3让我们说。
先谢谢
class Program
{
static void Main(string[] args)
{
List<Merchant> merchants = new List<Merchant>(10);
for (int i = 0; i < 10; i++)
{
List<Voucher> vcs = new List<Voucher>();
for (int j = 0; j < 3; j++)
{
vcs.Add(new Voucher(j,"Voucher" + j.ToString(),i, j, "Type_" +j.ToString()));
}
merchants.Add(new Merchant(i, i.ToString() + "_Merchant",vcs));
}
//This will return all the merchant's where the ID is greater than 4
Predicate<Merchant> filterByID;
MerchantFilter filter = new MerchantFilter(4);
filterByID = new Predicate<Merchant>(filter.FilterByMerchantGT4);
List<Merchant> filteredMerchants = merchants.FindAll(filterByID);
}
public class MerchantFilter
{
private int idValue;
public bool FilterByMerchantGT4(Merchant merch)
{
return merch.MerchantID > idValue;
}
public MerchantFilter(int value)
{
idValue = value;
}
}
public class Merchant
{
public int MerchantID { get; set; }
public string MerchantName { get; set; }
public List<Voucher> MerchantVouchers { get; set; }
public Merchant(int id, string Name, List<Voucher> vouchers)
{
MerchantID = id;
MerchantName = Name;
MerchantVouchers = vouchers;
}
}
public class Voucher
{
public int VoucherID { get; set; }
public string VoucherName { get; set; }
public int MerchantVoucherID { get; set; }
public int VoucherTypeID { get; set; }
public string VoucherTypeName { get; set; }
public Voucher(int ID, string Name, int merchantID, int typeID, string TypeName)
{
VoucherID = ID;
VoucherName = Name;
MerchantVoucherID = merchantID;
VoucherTypeID = typeID;
VoucherTypeName = TypeName;
}
}
答案 0 :(得分:1)
使用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类。您可以使用lambda表达式来定义FindAll方法的参数。