我有IQueryable<T>
类型的方法,这是它的实现:
public IQueryable<T> Get()
{
return db.Set<T>();
}
我必须编写LINQ查询,我想连接两个表(左连接)。它是Identtiy表用户和我的自定义表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
。所以方法get从personRepository调用good,但usersRepository方法返回null。我在哪里做错了?感谢
答案 0 :(得分:0)
您可能在组合来自两个不同数据库上下文的查询时出错。您的自定义PersonalInformation
可能位于自定义DBContext中,而Users
位于IdentityDBContext
中。见this related question。你可以:
将所有表格移至相同的上下文中。
分别查询表并在内存中合并。
These operators will cause EF to return the results so you can process in memory.
var people = personRepository.Get().ToList();
var users = usersRepository.Get().ToList();
var infoModels = users.GroupJoin(people,
u => u.Id,
p => p.UserId,
(u, mp) => new { n, ms = ms.DefaultIfEmpty() })
.SelectMany(z => z.ms.Select(m => new PersonalInfoModel
{
Name = m.Name,
LastName = m.LastName,
Email = z.n.Email
}));