[英]How do I filter a list by another list in a Razor page?
'transactions' 包含交易记录列表...
var transactions = from t in _context.Transaction
.Include(t => t.Account)
.Include(t => t.Account.AccountOwner)
select t;
'SelectedAccountOwners' 是基于多选框的字符串列表...
[BindProperty(SupportsGet = true)]
public List<string> SelectedAccountOwners { get; set; }
如何过滤“交易”,以便仅保留“SelectedAccountOwners”列表中具有 Account.AccountOwner.Name 的记录?
索引.cshtml.cs
namespace PersonalFinance_v0._1.Pages.Transactions
{
public class IndexModel : PageModel
{
private readonly PersonalFinance_v0_1.Data.PersonalFinance_v0_1Context _context;
public IndexModel(PersonalFinance_v0_1.Data.PersonalFinance_v0_1Context context)
{
_context = context;
}
public IList<Transaction> Transaction { get;set; }
public IList<Transaction> FilterOutput { get; set; }
[BindProperty(SupportsGet = true)]
public List<string> SelectedAccountOwners { get; set; }
[BindProperty(SupportsGet = true)]
public string groupNumber { get; set; }
public async Task OnGetAsync()
{
var accountOwnerQuery = from a in _context.AccountOwner
orderby a.Name
select a.Name;
var accountQuery = from a in _context.Account
orderby a.Name
select a.Name;
var transactions = from t in _context.Transaction
.Include(t => t.Account)
.Include(t => t.Account.AccountOwner)
select t;
if (SelectedAccountOwners.Any())
{
Debug.Print("Filter Transactions by Selected Owners");
}
if (!string.IsNullOrEmpty(groupNumber))
{
transactions = transactions.Where(t => t.GroupNumber.Equals(Convert.ToInt32(groupNumber)));
}
ViewData["AccountOwners"] = new SelectList(await accountOwnerQuery.Distinct().ToListAsync());
ViewData["Accounts"] = new SelectList(await accountQuery.Distinct().ToListAsync());
Transaction = await transactions
.OrderBy(t => t.Date).ThenBy(t => t.GroupNumber)
.ToListAsync();
}
}
}
您可以在Where
子句中使用Contains
。 像这样的东西:
if (SelectedAccountOwners.Any())
{
transactions = transactions.Where(t => SelectedAccountOwners.Contains(t.Account.AccountOwner.Name));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.