Linq 到 SQL 属性 映射到 table
Linq to SQL property mapping to table
假设我有一个包含 2 个表的数据库:User(Id, Name, PetId,...) 和 Pet(Id, Name, Color,...) 和这个 class:
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;
}
[...]
}
我正在尝试使用
之类的过滤器制作 link 到 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 中生成的表?
谢谢!
经过一段时间的努力,我发现下面的修改有效(从 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()
}
假设我有一个包含 2 个表的数据库:User(Id, Name, PetId,...) 和 Pet(Id, Name, Color,...) 和这个 class:
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;
}
[...]
}
我正在尝试使用
之类的过滤器制作 link 到 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 中生成的表?
谢谢!
经过一段时间的努力,我发现下面的修改有效(从 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()
}