C # - EF Lambda Включить для выбора 2 классов и исключения свойств из второго класса - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь найти решение о том, как избежать выбора других свойств из моего другого класса.

Предположим, у меня есть 2 класса с именем Class1 и Class2, и я хочу выбрать только Name1 в моем Class2.

// My Models
public class Class1 {
    public int Class1Id {get;set;}
    public string Gender {get;set;}
    public ICollection<Class2> Class2 {get;set;}
}

public class Class2{
    public int Class2Id {get;set;}
    public string Name1 {get;set;}
    public string Name2 {get;set;}
    public string Name3 {get;set;}
    public string Name4 {get;set;}
    public string Name5 {get;set;}
    public string Name6 {get;set;}

    public int Class1Id {get;set;}
    public Class1 Class1 {get;set;}
}

У меня есть метод, который выбирает все записи в Class1

public IQueryable<Class1> AllClass1(){
     return context.Class1.Include(c=>c.Class2);
}

Это будет работать, но проблема в том, что я хочу только выбрать Class2.Name1. Потому что в Включить, он выбирает другие свойства из Class2. Не только Имя1, но и Имя2-Имя6.

Это с точки зрения производительности и скорости загрузки данных.

С тех пор, как мне не понадобятся Name2-Name6, зачем мне их тоже выбирать?

1 Ответ

0 голосов
/ 10 мая 2018

Просто выберите ваше свойство в виде строкового массива

context.Class1.Include(c => c.Class2).SelectMany(x => x.Class2).Select(x => x.Prop1)

Если вы хотите, чтобы свойство в массиве типа вашего класса, просто создайте его новый экземпляр в методе выбора

context.Class1.Include(c=>c.Class2).SelectMany(x => x.Class2).Select(x => new Class2() { Prop1 = x.Prop1 })

И если вы хотите, чтобы экземпляр Class2 был частью вашего Class1, вы можете сделать Select на вашем Class1, но создать новый экземпляр Class1 в Select, где вы отобразите каждое свойство Class1 и установите массив Class2, как вкод выше

context.Class1.Include(c=>c.Class2).Select (x => new Class1() {
  Prop1 = x.Prop1,
  Prop2 = x.Prop2,
  ...
  Class2 = x.Class2.Select(y => new Class2() { Prop1 = y.Prop1 })
})

См. также Как загрузить только определенные поля дочернего объекта в Entity Framework 6.1? *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...