Свойство для связи полей в запросе LINQ to Entities - PullRequest
2 голосов
/ 06 марта 2020

У меня в таблице базы данных Users:

pk firstName lastName
1  Mary      Snow
...

LINQ to Entities создать класс:

public partial class User
{
   public int pk { get; set; }
   public string firstName { get; set; }
   public string lastName { get; set; }
}

Я пытался создать новую часть этого класса

public partial class User
{
   public string FullName 
   {
      get
      {
        return lastName + " " + firstName;
      }
   }
}

И после того, как я попытался использовать его в IQueryable, я получаю исключение «Элемент указанного типа« FullName »не поддерживается в LINQ to Entities». Могу ли я создать свойство или метод расширения для этого?

Мне это нужно во многих частях моего кода. И мне неудобно использовать в каждом запросе lastName + "" + firstName. Я не понимаю, почему я могу использовать в IQueryable "где (x => (x.lastName +" "+ x.firstName) ==" Mary Show ")", но я не могу написать новое свойство и использовать его как " где (x => x.FullName == "Mary Show") ".

Это пример того, что у меня есть больше модификаций полей.

upd: Я использую. NET Framework 4.5.2 и Entity Framework 6.

upd2: Я использую подход Database-First.

1 Ответ

0 голосов
/ 06 марта 2020

В качестве альтернативы вы можете сделать это с помощью Fluent API, переопределяющего функцию OnModelCreating в вашем классе DBContext:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
   modelBuilder.Entity<User>().Ignore(t => t.FullName );
   base.OnModelCreating(modelBuilder);
}
...