Для этого вы можете использовать AutoMapper . Просто создайте класс DTO со всеми свойствами, кроме тех, которые вы не хотите запрашивать:
public class MyItemDTO
{
public int Id { get; set; }
public string Name { get; set; }
}
Затем добавьте отображение:
Mapper.Initialize(cfg =>
{
cfg.CreateMap<MyItem, MyItemDTO>();
});
Теперь вы можете запрашивать ваши объекты следующим образом:
context.MyItem
.OrderBy(m => m.Name)
.ProjectTo<MyItemDTO>();
Это расширение доступно в AutoMapper.QueryableExtensions
.
Вы также можете создать класс DTO со всеми свойствами объекта и затем игнорировать некоторые из них при отображении:
cfg.CreateMap<MyItem, MyItemDTO>().ForMember(d => d.Image, m => m.Ignore());
Если вы используете EF Core , вы можете создать экземпляр класса сущности внутри запроса LINQ, чтобы можно было отобразить сущность на себя и игнорировать некоторые свойства из нее без создания дополнительных классов DTO:
cfg.CreateMap<MyItem, MyItem>().ForMember(d => d.Image, m => m.Ignore());
Затем вы просто используете ProjectTo
с типом сущности, который исключает нежелательные свойства из запроса SQL:
context.MyItem
.OrderBy(m => m.Name)
.ProjectTo<MyItem>();
Обратите внимание, что вам также может понадобиться создать сопоставления для каждого свойства навигации объекта.