У меня есть две таблицы 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();
Этот запрос заканчивается тайм-аута каждый раз. Как я могу улучшить это?
Я думаю, что это будет выполнять очень быстро, как это , –
К сожалению, этого не произошло. Запрос, создаваемый LINQ, был чудовищным. Ответ ниже был довольно быстрым. – Anand
Хм, я должен согласиться с @RobertMcKee. Что произойдет, если вы включите существительное Прилагательные во второй запрос, как в оригинале? –