Предположим, что у меня есть модель под названием Item
, которая выглядит следующим образом:Применение Linq к DbSet внутри DbContext
public int ID { get; set; }
public DateTime DateCreated { get; set; }
public DateTime? DateArchived { get; set; }
[Required]
public string Alias { get; set; }
Он был включен в DbContext ...
public DbSet<Item> Items { get; set; }
Всякий раз, когда я хочу выберите все элементы из базы данных, я хочу включить только элементы, где Archived == null
и отсортировано по Alias
.
Есть ли способ настроить EF для этого, когда вызывается DbSet (например, на DbContext)?
Например, если я вызываю db.Items в контроллере, я всегда хочу, чтобы эти параметры применялись, не указывая их явно.
Мой текущий способ сделать это - переименовать DbSet с префиксом «Все» и добавить функцию с этими параметрами (функция использует исходное имя DbSet, чтобы контроллеры и страницы эскалаторов использовали настраиваемый запрос без каких-либо изменений):
public DbSet<Item> AllItems { get; set; }
public IQueryable<Item> Items
{
get { return AllItems.Where(item => item.Archived == null).OrderBy(item => item.Alias); }
}
Но что-то об этом методе кажется хакерским/неправильным. Это прекрасный способ сделать это? Как это обычно делается?
Я не думаю, что это взломать или неправильно. Что, если вам по какой-то причине нужны все предметы? – MutantNinjaCodeMonkey
@ Я согласен с @MutantNinjaCodeMonkey. Мне кажется, это прекрасно для меня –