想知道是否存在針對這種複雜情況的linq解決方案;例如,客戶選擇顏色:紅色,尺寸:大,類型:棉花。如果我知道肯定是一個客戶會選擇這些過濾器每單的時候,我只想做這樣的事情:構建基於Linq的複雜搜索過濾器
var shirts = ListOfShirts.Where(i=> i.Color.Contains("red") && Size.Contains("Large") && Type.Contains("Cotton"));
這裏是目前的結構,並且接受了許多從視圖中的過濾器的操作方法:
類:
public partial class Shirt {
public long ID { get; set; }
public string Color { get; set; }
public string Size { get; set; }
public string Type { get; set; }
}
public class SelectedFilter {
public string Name { get; set; } // Filter Menu Title
public string Value { get; set; }
}
控制器:
public ActionResult Filter(IList<SelectedFilter> selectedFilters) {
var model = new List<Shirt>();
Shirt ListOfShirts = db.GetAllShirts();
var groups = selectedFilters.GroupBy(i => i.Name);
foreach (var g in groups)
{
var GroupName = g.FirstOrDefault().name;
var GroupValues = g.Select(i => i.value).ToList();
if (g.FirstOrDefault().name == "Color")
{
model = ListOfShirts.Where(i => GroupValues.Contains(i.Color)).ToList();
}
else if (g.FirstOrDefault().name == "Size")
{
model = ListOfShirts.Where(i => GroupValues.Contains(i.Size)).ToList();
}
else if (g.FirstOrDefault().name == "Type")
{
model = ListOfShirts.Where(i => GroupValues.Contains(i.Type)).ToList();
}
}
}
你的問題,基本上,如何構建一個表達式根據其名稱訪問該屬性? – Groo
如果不爲您編寫它,請查看錶達式樹:https://msdn.microsoft.com/en-us/library/mt654263.aspx,這是更優雅的方法之一。否則,只要在你的where子句中進行演繹推理。 – RandomUs1r
*如果我確實知道客戶每次都會選擇這些過濾器,我只會做這樣的事情*好的,這有什麼問題?我期待的是,*但是... * –