Сопоставление свойств Linq to SQL с таблицей - PullRequest
0 голосов
/ 25 июня 2018

Допустим, у меня есть база данных с 2 таблицами: User (Id, Name, PetId, ...) и Pet (Id, Name, Color, ...) и этот класс:

class UserPet
{
 // User table, generated in dbml
 public User User {get;}

 // Pet table, generated in dbml
 public Pet Pet {get;}

public UserPet(User user, Pet pet)
{
 User = user;
 Pet = pet;
}
 [...]
}

Я пытаюсь создать ссылку на метод sql с фильтром типа

public UserPet[] Get(Expression<Func<UserPet, bool>> criteria)
{
 [...]
// System.NotSupportedException: 'The member 'User' has not supported translation to sql'
 return (from user in context.User
        join pet in context.Pet on usr.PetId equal pet.Id
     -->   select new UserPet(user, pet).Where(criteria).ToArray()
}

Так, например, я могу сделать запрос с динамической фильтрацией:

Get(userPet => userPet.Pet.Color == "Red" && userPet.User.Name == "Dave")

Здесь,критерием является объект, содержащий 2 таблицы, и я изо всех сил пытаюсь использовать его в методе linq to sql.Любая идея ?Как сказать Linq To SQL, что свойства UserPet - это таблицы, сгенерированные в dbml?

Спасибо!

1 Ответ

0 голосов
/ 26 июня 2018

Через некоторое время я обнаружил, что приведенная ниже модификация работает (удалите конструктор с параметром из UserPet).Зачем ?Mystery!

UserPet:

class UserPet
{
 public User user {get;set;}
 public Pet pet {get;set}
}

И метод:

public UserPet[] Get(Expression<Func<UserPet, bool>> criteria)
{
 [...]
 return (from user in context.User
        join pet in context.Pet on usr.PetId equal pet.Id
        select new UserPet(){User = user, Pet = pet}).Where(criteria).ToArray()
}
...