как создать динамическую группу фильтров для каждой группы продуктов в LINQ - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть группа ПРОДУКТОВ , что у каждой группы есть группа АТРИБУТ ФИЛЬТРА и ее динамика для каждой группы. Теперь я хочу, чтобы пользователи могли выбирать несколько фильтров для каждой группы. Например, группамарки и цвета, которые выбрали 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())));

                         }

это хорошо работает, но только для последнего цикла, что означает, что последняя группа фильтров, отправленная в контроллер, влияет на продукт ине остальные

есть предложения по этому поводу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...