Присоединение к таблице «многие ко многим» - PullRequest
3 голосов
/ 27 мая 2010

У меня есть ситуация, когда я предоставляю метод для запроса данных различными способами.Мы предоставляем пользователю 4 различных критерия соответствия, и они могут смешивать и сопоставлять столько, сколько хотят.

Например:

 public Fruit GetFruit(Boolean isLocal, string storeName, string classificationType, string state);

Это просто, когда все атрибуты находятся натаблица, но моя проблема возникает в результате сложности в модели данных.Три из моих атрибутов просты, они просто соединения, но у меня есть одна таблица, которая стоит за отношениями один ко многим.Поэтому, чтобы запросить его, мне нужно присоединиться ко многим.

Итак, допустим, я пытаюсь определить все фрукты, которые предлагает магазин.В магазине есть список фруктов, и наш классификационный тип находится во многих отношениях (FruitClassification)

альтернативный текст http://tinyurl.com/39q6ruj

Единственный успешный способ, которым я смог запросить это в EF, этовыбрав все фрукты (по классификации), а затем выбрав все магазины, которые соответствуют критериям фильтра, и затем присоединив их.

Можно подумать, что этот запрос в ef будет функциональным:

var final = (
                from s in Stores
                join fc in FruitClassifications.Where(z=>z.Classifications.Code == classificationType && z.Classifications.Type.Code =="FRT").Select(x=>x.Fruit).Distinct()
                 on s.Fruits.Id equals f.Id
                 where s.Name=name && s.isLocal && s.State==state
                select s
                ).ToList();

Ноон работает ужасно (и выглядит так же, когда я его профилирую), есть ли способ отправить этот запрос в базу данных?Лучший способ сделать запрос?

Ответы [ 2 ]

3 голосов
/ 27 мая 2010

Я думаю, это то, что вы хотите:

var final = (from s in Stores
             where s.Name=name && s.isLocal && s.State==state
                   && s.Fruits.Any(f => 
                       f.FruitClassifications.Any(fc => fc.Code == classificationType
                                                           && fc.Type.Code == "FRT"))
             select s).ToList();
0 голосов
/ 27 мая 2010

http://learnentityframework.com/LearnEntityFramework/tutorials/many-to-many-relationships-in-the-entity-data-model/

это может вам помочь. EF имеет возможность генерировать эти отношения со свойствами навигации из конструктора, поэтому вам не нужно использовать соединение.

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