locked
Как правильно сравнить RRS feed

  • Вопрос

  • Есть 2 таблицы.

    Первая сохраняет рецепты, во второй хранятся ингредиенты.

    Задача вывести в лист бокс те рецепты для которых полностью доступны ингредиенты.

                                                                                                                                                        

    for(int i=1; i<=c.Cocktail.Count();i++) // цикл проходит все рецепты
                {
                    var item = c.Cocktail.FirstOrDefault(a => a.Id == i);
                    string[] split = item.Ing2.Split(new Char[] { ',' }); // разбиваем на массив строку типа "Водка малиновая,Апельсин,Ванильный сахарный песок"

    for (int j = 0; j < split.Count(); j++)// цикл пробегает массив
                    {

                        var item2 = c.Ingredient.FirstOrDefault(ad => ad.Nameingr == split[j].ToString()); // находим нужный ингредиент который соответствует по названию
                        if (item2.Shopping == "pack:/Assets/iconb.png") // сравниваю доступен ли ингредиент ("pack:/Assets/iconb.png" - как флаг что ингредиент есть) 
                        {
                            

                         }

                        }
                        else
                        {

                            break;
                        }

                    }

    Вот как правильно сделать что бы проверить все ли значения в массиве верны то добавлять (aq.Add(c.Cocktail.FirstOrDefault(av => av.Id == i));) этот рецепт в список.

    Да не правильно сделал что таблицы не связаны, как сделать не знаю. Приму все что напишите в помощь)

    1 августа 2014 г. 7:49

Ответы

  • for(int i=1; i<=c.Cocktail.Count();i++) // цикл проходит все рецепты { var item = c.Cocktail.FirstOrDefault(a => a.Id == i); string[] split = item.Ing2.Split(new Char[] { ',' }); // разбиваем на массив строку типа "Водка малиновая,Апельсин,Ванильный сахарный песок"

    var matches = 0; for (int j = 0; j < split.Count(); j++)// цикл пробегает массив { var item2 = c.Ingredient.FirstOrDefault(ad => ad.Nameingr == split[j].ToString()); // находим нужный ингредиент который соответствует по названию if (item2.Shopping == "pack:/Assets/iconb.png") // сравниваю доступен ли ингредиент ("pack:/Assets/iconb.png" - как флаг что ингредиент есть) { matches++; } else { break; } }

    if(matches == split.Length)

    {

    //добавить элемент в ListBox.

    } }



    • Изменено Oleg Kurzov 1 августа 2014 г. 8:17
    • Помечено в качестве ответа Matcurov Alexandr 1 августа 2014 г. 9:17
    1 августа 2014 г. 8:16

Все ответы

  • for(int i=1; i<=c.Cocktail.Count();i++) // цикл проходит все рецепты { var item = c.Cocktail.FirstOrDefault(a => a.Id == i); string[] split = item.Ing2.Split(new Char[] { ',' }); // разбиваем на массив строку типа "Водка малиновая,Апельсин,Ванильный сахарный песок"

    var matches = 0; for (int j = 0; j < split.Count(); j++)// цикл пробегает массив { var item2 = c.Ingredient.FirstOrDefault(ad => ad.Nameingr == split[j].ToString()); // находим нужный ингредиент который соответствует по названию if (item2.Shopping == "pack:/Assets/iconb.png") // сравниваю доступен ли ингредиент ("pack:/Assets/iconb.png" - как флаг что ингредиент есть) { matches++; } else { break; } }

    if(matches == split.Length)

    {

    //добавить элемент в ListBox.

    } }



    • Изменено Oleg Kurzov 1 августа 2014 г. 8:17
    • Помечено в качестве ответа Matcurov Alexandr 1 августа 2014 г. 9:17
    1 августа 2014 г. 8:16
  • Над таким вариантом я думал и пробовал, но не выводит элемент у которого все элементы ингредиентов доступны, выводит элементы в непонятном порядке у которых или вообще ингредиенты отсутствуют, или частично присутствуют, как такое возможно после цикла проверки не знаю.
    1 августа 2014 г. 8:41
  • Поставьте брейкпоинт на 
    if(matches == split.Length)
    Гляньте, какой айтем Вы собираетесь добавить в коллекцию, какие у него ингридиенты и какие ингридиенты сидят в массиве split
    1 августа 2014 г. 8:45
  • Проблему решил просто обнуляя matches в конце прохождения цикла. 
    1 августа 2014 г. 9:17
  • Проблему решил просто обнуляя matches в конце прохождения цикла. 
    Он в коде выше и так пересоздается на каждой итерации коктейля.
    1 августа 2014 г. 9:36
  • У меня уже была переменная вне цикла, по этому пришлось обнулить. Так все правильно, такой способ я уже побывал но не правильно устанавливал проверку.
    1 августа 2014 г. 9:40