У меня есть группа ПРОДУКТОВ , что у каждой группы есть группа АТРИБУТ ФИЛЬТРА и ее динамика для каждой группы. Теперь я хочу, чтобы пользователи могли выбирать несколько фильтров для каждой группы. Например, группамарки и цвета, которые выбрали 2 марки и 3 цвета, которые 2 марки являются самим объединением, а также 3 цвета должны быть объединением, но комбинация этих двух групп фильтров должна пересекаться
я нашел решение, но я думаю, что любитель
for (var i = 0; i < filtA.Length; i++)
{
eachfiltGrp = filtA[i].Split('G');
eachfilt = eachfiltGrp[1].Split('A');
if (eachfilt.Length == 1)
{
var filter0 = Convert.ToInt32(eachfilt[0]);
products = products.Include(p => p.Product_Attribut).Where(x => x.Product_Attribut.Any(p => p.AttributeID == filter0));
}
else if (eachfilt.Length == 2)
{
var filter0 = Convert.ToInt32(eachfilt[0]);
var filter1 = Convert.ToInt32(eachfilt[1]);
products = products.Include(p => p.Product_Attribut).Where(x => x.Product_Attribut.Any(p => p.AttributeID == filter0 || p.AttributeID == filter1));
}
else if (eachfilt.Length == 3)
{
var filter0 = Convert.ToInt32(eachfilt[0]);
var filter1 = Convert.ToInt32(eachfilt[1]);
var filter2 = Convert.ToInt32(eachfilt[2]);
products = products.Include(p => p.Product_Attribut).Where(x => x.Product_Attribut.Any(p => p.AttributeID == filter0 || p.AttributeID == filter1 || p.AttributeID == filter2));
}
это работает отлично, но только для 3 групп фильтров, и для большего я должен написать здесь больше условий filterA содержит строку, включающую все фильтры, отправленные в контроллер и каждый идентификатор группы и фильтрыразделены на G и каждый фильтр для группы разделен на A thst не является динамическим
теперь я изменяю эти строки с этим и звучит так, как должно работать
var products = db.Products.Include(p => p.Product_Groups);
for (var i = 0; i < filtA.Length; i++)
{
eachfiltGrp = filtA[i].Split('G');
eachfilt = eachfiltGrp[1].Split('A');
products = Products.Where(p => p.Product_Attribut.Any(x => eachfilt.Contains(x.AttributeID.ToString())));
}
это хорошо работает, но только для последнего цикла, что означает, что последняя группа фильтров, отправленная в контроллер, влияет на продукт ине остальные
есть предложения по этому поводу?