我有一个对象列表。一个对象具有以下属性:
public string mCardColor { get; set; }
public string mCardType { get; set; }
public string mCardRarity { get; set; }
在我看来,我可以使用下拉列表直接过滤通过搜索引擎获得的列表。
然后我将过滤器的值传递给控制器方法并检查请求是否是实际的 Ajax 请求,如下所示:
public ActionResult DisplayCardsResults(string _rarity = "", string _type = "", string _color = "")
{
ViewBag._rarity = _rarity;
ViewBag._color = _color;
ViewBag._type = _type;
if (Request.IsAjaxRequest())
{
mListCardColors = null;
mListCardType = null;
mListCardRarity = null;
if (_rarity != "All")
{
mListCardRarity = mListCards.Where(_item => _item.mMasterCard.mCardRarity == _rarity).ToList();
}
if (_type != "All")
{
mListCardType =
mListCards.Where(_item => _item.mMasterCard.mCardType.ToLower().Contains(_type.ToLower())).ToList();
}
if (_color != "All")
{
mListCardColors = mListCards.Where(_item => _item.mMasterCard.mCardColor == _color).ToList();
}
if (mListCardType == null && mListCardColors == null && mListCardRarity == null)
{
return PartialView("_ResultsTable", mListCards.ToPagedList(pageNumber, ValueDomain.PAGE_SIZE));
}
mListCardsToShow = new List<CardDisplay>();
if (mListCardType != null)
{
mListCardsToShow.AddRange(mListCardType);
}
if (mListCardRarity != null)
{
mListCardsToShow.AddRange(mListCardRarity);
}
if(mListCardColors != null)
{
mListCardsToShow.AddRange(mListCardColors);
}
return PartialView("_ResultsTable", mListCardsToShow.ToPagedList(pageNumber, ValueDomain.PAGE_SIZE));
}
if (mListCardsToShow.Count > 0)
{
mListCardsToShow = SortListOrder(_sortOrder, mListCardsToShow);
return View(mListCardsToShow.ToPagedList(pageNumber, ValueDomain.PAGE_SIZE));
}
if (mListCards.Count > 0)
{
mListCards = SortListOrder(_sortOrder, mListCards);
}
return View(mListCards.ToPagedList(pageNumber, ValueDomain.PAGE_SIZE));
}
您有 2 个列表:这mListCards
是从搜索引擎获得的卡片列表。这不需要改变。mListCardsToShow
仅当请求是 Ajax 请求时才使用。
我只想根据传递给控制器方法的过滤器保留所需的值。原理如下:如果三个下拉列表都在,则显示所有卡片。但如果任何或所有下拉列表中有值,则需要过滤实际列表。
除了编写 9 个不同的场景之外,是否有一种有效的方法来使用 Linq 根据三个参数过滤列表?