【发布时间】:2017-09-18 21:53:22
【问题描述】:
我有一个IQueryable<T> 类型的方法,这是它的实现:
public IQueryable<T> Get()
{
return db.Set<T>();
}
我必须编写 LINQ 查询来连接两个表(左连接)。是 Identtiy 表 Users 和我的自定义表 PersonalInformation 扩展了用户注册字段,现在我想在我的 LINQ 查询中调用这个方法,这很好。这是我的 Linq:
IRepository<PersonalInformation> personRepository;
IRepository<ApplicationUser> usersRepository;
var query = personRepository.Get();
var test = usersRepository.Get()
.GroupJoin(query,
n => n.Id,
m => m.UserId,
(n, ms) => new { n, ms = ms.DefaultIfEmpty() })
.SelectMany(z => z.ms.Select(m => new PersonalInfoModel
{
Name = m.Name,
LastName = m.LastName,
Email = z.n.Email
}));
但是我有一个错误
var test = usersRepository.Get() - System.NotSupportedException。因此,从 personRepository 中获取的方法调用良好,但 usersRepository 方法返回 null。我哪里做错了??谢谢
【问题讨论】:
-
Get是IRepository的成员吗? -
@NetMage 是的,它是接口 IRepository
: IDisposable where T : class 并且有 IQueryable Get();我在 linq 中有一个不同的上下文错误 -
所以
usersRepository的真实类型有可能没有实现IRepository的Get操作。虽然我不喜欢它,但有些类部分实现了接口。personRepository和usersRepository的真实类型是什么? -
@NetMage 对不起,我不明白它显示(字段)IRepository
HomeControloller.personRepository。接下来我还在 HomeContoller 的构造函数中创建: personRepository = new MainRepository ();和 usersRepository = new MainRepository (); -
@NetMage 我想我知道哪里出错了。在我实现方法 get 的 MainRepository 中,我使用 return db.Set
();其中 db 是 ApplicationDbContext ,但这很奇怪,因为 ApplicationDbContext 是身份上下文,我不明白为什么会出错
标签: asp.net-mvc linq iqueryable