2015-12-08 4 views
0

У меня есть две таблицы SQL Server, «Существительные» и «Прилагательные». Для каждого существительного существует множество прилагательных. Пример: {Noun = Apple, Adjective = [Fruit, Red, Sweet]}, {Noun = Ball, Adjective = [Red, Hard]}. Есть приблизительно 5 прилагательных на существительное. В таблице Прилагательные есть ссылка внешнего ключа на поле Id в таблице Nouns. Запрос, который я хочу поддержать, - это получить все существительные, удовлетворяющие определенному свойству (например: получить все существительные, которые были созданы в определенное время), а также удовлетворить прилагательное. Пример запроса: Получите мне все существительные, которые были созданы в 7:30 утра и имеют красный цвет в них.Эффективное соединение в Entity Framework/LINQ

Мой LINQ запрос выглядит следующим образом:

var currentTime = DateTime.Now; 
var type = "Red"; 
return (from n in this.dbContext.Nouns where 
       n.CreatedAt == currentTime && n.Adjectives.Any(a => a.AdjectiveType == type) 
       orderby n.PriorityScore descending 
      select new NounAdjectives 
      { 
       Term = n.Term, 
       Adjectives = n.Adjectives 
      }).Take(10).ToList(); 

Этот запрос заканчивается тайм-аута каждый раз. Как я могу улучшить это?

+0

Я думаю, что это будет выполнять очень быстро, как это , –

+0

К сожалению, этого не произошло. Запрос, создаваемый LINQ, был чудовищным. Ответ ниже был довольно быстрым. – Anand

+0

Хм, я должен согласиться с @RobertMcKee. Что произойдет, если вы включите существительное Прилагательные во второй запрос, как в оригинале? –

ответ

1

Я не уверен, если вы пытаетесь получить все комбинации прилагательного и существительного, где существительное отвечает, что критерии, но, чтобы получить все существительные, которые отвечают, что

from n in this.dbContext.Nouns join adj this.dbContext.Adjectives on (insert FK and PK) where n.Created == currentTime AND adj.Name == "Red" Select n 
Смежные вопросы