Я использую Entity Framework. Следующий класс представляет таблицу из базы данных.Можно ли получить эти данные с помощью одного запроса linq?
public partial class TermBucket
{
public short ID { get; set; }
public byte Period { get; set; }
public byte Min { get; set; }
public byte Max { get; set; }
}
PK - это идентификатор и период, поэтому в таблице может быть несколько идентификаторов.
При запросе объекта у меня есть в моем распоряжении период + время (число, связанное с периодом). Период устанавливается как перечисление, поэтому я хотел бы использовать его как:
Time: 3
Period: 3 (Days)
То, что я хочу сделать, это найти ведро, которое соответствует требованиям, а затем получить все записи для этого ведра. Вот что я в настоящее время сделать:
Шаг 1: Получить ID
return r.Find() // this is my repository
.AsNoTracking()
.Where(x => (int)tp.Period == x.Period && tp.Time >= x.Min && tp.Time <= x.Max)
.Select(x => x.ID)
.Single();
Шаг 2: Получить все записи для ID, используя извлеченную ID
return r.Find()
.AsNoTracking()
.Where(x => x.ID == ID);
Итак, есть 2 различных запросов, но можно ли получить эти данные за один раз?
Возможно, вы можете просто вложить первый запрос во второй? Вы пробовали что-то вроде ответов, найденных здесь: http://stackoverflow.com/questions/5354050/nested-select-linq-query – MaxRev17
Да просто объедините предикаты, используя &&, '.Where (x => (int) tp. Период == x.Period && tp.Time> = x.Min && tp.Time <= x.Max && x.ID == ID) ' –